小编Wic*_*koo的帖子

成员访问中的问号在C#中意味着什么?

有人可以向我解释以下代码中成员访问中的问号是什么意思?

它是标准C#的一部分吗?尝试在Xamarin Studio中编译此文件时出现解析错误.

this.AnalyzerLoadFailed?.Invoke(this, new AnalyzerLoadFailureEventArgs(AnalyzerLoadFailureEventArgs.FailureErrorCode.NoAnalyzers, null, null));
Run Code Online (Sandbox Code Playgroud)

AnalyzerFileReference.cs第195行

c# null operators

5
推荐指数
2
解决办法
2300
查看次数

从不可变的集合创建可变集合

假设我Map使用Guava的库创建了以下内容:( List<Integer>也是不可变的)

Map<String, List<Integer>> map = ImmutableMap.builder()...
Run Code Online (Sandbox Code Playgroud)

我将此映射传递给一个类,我想在其中创建一个可变副本并对其进行修改.它当然可以手动完成,但有没有办法将嵌套的不可变集合转换回可变集合?

java guava

5
推荐指数
1
解决办法
4726
查看次数

Javassist annoations问题

我正在尝试使用javassist生成我的Entity类.一切顺利,直到我将GeneratedValue注释添加到Id字段.@Id注释工作正常,但是当我添加@GeneeratedValue时,我得到一个异常.这是我的代码:

  ClassPool cp = ClassPool.getDefault();
  CtClass ctClass = cp.makeClass("test.Snake");
  ClassFile classFile = ctClass.getClassFile();
  classFile.setVersionToJava5();

  AnnotationsAttribute attribute = new AnnotationsAttribute(classFile.getConstPool(), AnnotationsAttribute.visibleTag);

  Annotation idAnnotation = new Annotation(classFile.getConstPool(), ClassPool.getDefault().get("javax.persistence.Id"));
  attribute.addAnnotation(idAnnotation);

  Annotation gvAnnotation = new Annotation(classFile.getConstPool(), ClassPool.getDefault().get("javax.persistence.GeneratedValue"));
  attribute.addAnnotation(gvAnnotation);

  CtField idField = new CtField(ClassPool.getDefault().get("java.lang.Long"), "id", ctClass);
  idField.getFieldInfo().addAttribute(attribute);
  ctClass.addField(idField);

  CtField nameField = new CtField(ClassPool.getDefault().get("java.lang.String"), "name", ctClass);
  ctClass.addField(nameField);

  AnnotationsAttribute attr = new AnnotationsAttribute(classFile.getConstPool(), AnnotationsAttribute.visibleTag);
  Annotation annotation = new Annotation(classFile.getConstPool(), ClassPool.getDefault().get("javax.persistence.Entity"));
  attr.addAnnotation(annotation);
  classFile.addAttribute(attr);

  snakeClass = ctClass.toClass();
  newInstance = snakeClass.newInstance();
Run Code Online (Sandbox Code Playgroud)

这是我得到的例外:

java.lang.NullPointerException
 at javassist.bytecode.ConstPool.getUtf8Info(ConstPool.java:565)
 at javassist.bytecode.annotation.EnumMemberValue.getValue(EnumMemberValue.java:98)
 at javassist.bytecode.annotation.EnumMemberValue.write(EnumMemberValue.java:116)
 at …
Run Code Online (Sandbox Code Playgroud)

java annotations javassist

4
推荐指数
1
解决办法
3615
查看次数

TypeScript 3 中的项目引用,带有单独的 `outDir`

我想利用 TypeScript 3.1 中的项目引用功能。我的项目编译后的目录结构原来是这样的:

.
??? A
?   ??? a.ts
?   ??? dist
?   ?   ??? A
?   ?   ?   ??? a.js
?   ?   ??? Shared
?   ?       ??? shared.js
?   ??? tsconfig.json
??? Shared
    ??? dist
    ?   ??? shared.js
    ??? shared.ts
    ??? tsconfig.json
Run Code Online (Sandbox Code Playgroud)

目录内容Shared

shared.ts

export const name = "name";
Run Code Online (Sandbox Code Playgroud)

tsconfig.json

{
  "compilerOptions": {
    "target": "es5",                          
    "module": "commonjs",                     
    "outDir": "dist",                        
    "strict": true
  }
}
Run Code Online (Sandbox Code Playgroud)

目录内容A

a.ts

import { name } from "../Shared/shared"; …
Run Code Online (Sandbox Code Playgroud)

typescript

4
推荐指数
1
解决办法
2465
查看次数

在Java 8中使用flatmap编写流

我们考虑一下我有以下课程:

class A {
   int i, j, k;

   public A(int i, int j, int k) {
     this.i = i; this.j = j; this.k = k;
   }
}
Run Code Online (Sandbox Code Playgroud)

其中i,j,k具有已知的范围:r_i,r_j,r_k.现在我想生成A此范围内的所有可能实例.我可以想出类似的东西:

Stream.iterate(0, n -> ++n).limit(r_i)
.flatMap(i -> Stream.iterate(0, n -> ++n).limit(r_j)
.flatMap(j -> Stream.iterate(0, n -> ++n).limit(r_k)
.map(k -> new A(i, j, k)))).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

首先,它太冗长了.有没有办法缩短它?特别是我无法找到一个rangeStream.其次,编译器无法确定返回类型的类型.它认为它 List<Object>不是预期的List<A>.我该如何解决这个问题?

java java-8 java-stream flatmap

3
推荐指数
1
解决办法
1013
查看次数

来自文件的JMH参数

我想对程序(使用JMH)进行基准测试,该程序从文件中读取数据然后测量性能.文件名称存储为列表.问题是@Param只采用常量表达式,所以在某种程度上它意味着我需要对所有文件名进行静态编码@Param,这看起来不太好.

还有另一种方法,为没有静态编码的不同文件运行基准测试吗?

java jmh

3
推荐指数
1
解决办法
999
查看次数

TypeScript编译器API获取导入名称的类型

考虑以下import声明。

import { a } from "moduleName"
Run Code Online (Sandbox Code Playgroud)

如何获得的声明类型a。例如,在类或函数的情况下,ClassDeclaration或者,FunctionDeclration或者Namespace还有类型的名称?

在上面的示例中, ais是ImportSpecifier,但是当我尝试使用解析它时typeChecker.getSymbolAtLocationtypeChecker.getTypeAtLocation我只得到Identifiertype any

types typescript typescript-compiler-api

3
推荐指数
1
解决办法
815
查看次数

Java包装类具体类型的子类

假设我有一个班级人员如下:

public class Person {
   String name;
   int age;
}
Run Code Online (Sandbox Code Playgroud)

和许多子类,例如

public class Student extends Person {
   // extra fields and methods
}
public class Teacher extends Person {
   // extra fields and methods
}
Run Code Online (Sandbox Code Playgroud)

现在,考虑到对于某些应用程序,我需要为每个 person 实例分配一个整数 id,但我不想扩展接口Person以在其中添加 getId() 和一个用于保存 id 的字段。一个简单的解决方案是使用如下包装器:

public class PersonWrapper extends Person {
    public PersonWrapper(Person p, int id) { // assign the id and other fields }
    public int getId() { return id; }
}
Run Code Online (Sandbox Code Playgroud)

这样,客户端代码仍然可以使用 Person 接口,并且可以将包装的人视为一个人。这种方法的问题在于 PersonWrapper 是 Person 的子类,而不是 …

java subclass wrapper

2
推荐指数
1
解决办法
2724
查看次数

在 Scala 中合并两个可迭代对象

我想编写一个merge方法,它接受两个可迭代对象并将它们合并在一起。(也许合并不是描述我想要的最好的词,但就这个问题而言,它无关紧要)。我希望这种方法可以通用以处理不同的具体迭代。

例如,merge(Set(1,2), Set(2,3))should returnSet(1,2,3)merge(List(1,2), List(2,3))should return List(1, 2, 2, 3)。我做了以下幼稚的尝试,但编译器抱怨res: It isIterable[Any]而不是A.

def merge[A <: Iterable[_]](first: A, second: A): A = {
    val res = first ++ second
    res
}
Run Code Online (Sandbox Code Playgroud)

如何修复此编译错误?(我更感兴趣的是了解如何实现这样的功能,而不是为我完成它的库,因此非常感谢解释为什么我的代码不起作用。)

generics collections scala

2
推荐指数
1
解决办法
516
查看次数

没有显式导入的类之间的依赖关系

让我们在Java中考虑这个简单的类层次结构:

A类:

package a;

import b.B;

public class A {
    public B a() {
        return new B();
    }
}
Run Code Online (Sandbox Code Playgroud)

B级:

package b;

public class B {
    public void b() {
        System.out.println("B!");
    }
}
Run Code Online (Sandbox Code Playgroud)

主要:

import a.A;

public class Main {
    public static void main(String[] args) {
        A a = new A();
        a.a().b();
    }
}
Run Code Online (Sandbox Code Playgroud)

可以看出,只有A从课堂直接导入Main.但是,我们正在调用b返回的方法A.a().我的问题是,虽然我们没有之间的直接进口依存度不MainB,被他们仍然被认为是直接依赖?例如,当我分析类之间的依赖关系时?

java import dependencies

2
推荐指数
1
解决办法
45
查看次数

for循环中的OCaml分号单表达式

为什么Proc.num_stack_slots.(i) <- 0在以下代码的末尾有分号?我认为分号是OCaml中的分隔符.我们总是可以为块的最后一个表达式添加一个可选的分号吗?

for i = 0 to Proc.num_register_classes - 1 do
  Proc.num_stack_slots.(i) <- 0;
done;
Run Code Online (Sandbox Code Playgroud)

有关完整示例,请参阅https://github.com/def-lkb/ocaml-tyr/blob/master/asmcomp/coloring.ml第273行.

syntax ocaml

1
推荐指数
1
解决办法
1346
查看次数

隐式对象上方法调用的 Scala 优先级

假设我有以下 scala 代码:

case class Term(c:Char) {
   def unary_+ = Plus(this)
}

case class Plus(t:Term)

object Term {
  implicit def fromChar(c:Char) = Term(c) 
}
Run Code Online (Sandbox Code Playgroud)

现在我从 scala 控制台得到这个:

scala> val p = +'a'
p: Int = 97

scala> val q:Plus = +'a'
<console>:16: error: type mismatch;
found   : Int
required: Plus
   val q:Plus = +'a'
                ^
Run Code Online (Sandbox Code Playgroud)

因为“+”已经存在于 Char 类型上,所以我认为不会发生隐式转换。有没有办法覆盖默认行为并在应用于 Char 类型之前在转换后的 Term 上应用“+”?

(顺便说一句,这个例子是人为的,我不是在寻找替代设计。这个例子只是为了说明问题)

scala

0
推荐指数
1
解决办法
258
查看次数