有人可以向我解释以下代码中成员访问中的问号是什么意思?
它是标准C#的一部分吗?尝试在Xamarin Studio中编译此文件时出现解析错误.
this.AnalyzerLoadFailed?.Invoke(this, new AnalyzerLoadFailureEventArgs(AnalyzerLoadFailureEventArgs.FailureErrorCode.NoAnalyzers, null, null));
Run Code Online (Sandbox Code Playgroud)
假设我Map使用Guava的库创建了以下内容:( List<Integer>也是不可变的)
Map<String, List<Integer>> map = ImmutableMap.builder()...
Run Code Online (Sandbox Code Playgroud)
我将此映射传递给一个类,我想在其中创建一个可变副本并对其进行修改.它当然可以手动完成,但有没有办法将嵌套的不可变集合转换回可变集合?
我正在尝试使用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) 我想利用 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) 我们考虑一下我有以下课程:
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)
首先,它太冗长了.有没有办法缩短它?特别是我无法找到一个range
上Stream.其次,编译器无法确定返回类型的类型.它认为它
List<Object>不是预期的List<A>.我该如何解决这个问题?
我想对程序(使用JMH)进行基准测试,该程序从文件中读取数据然后测量性能.文件名称存储为列表.问题是@Param只采用常量表达式,所以在某种程度上它意味着我需要对所有文件名进行静态编码@Param,这看起来不太好.
还有另一种方法,为没有静态编码的不同文件运行基准测试吗?
考虑以下import声明。
import { a } from "moduleName"
Run Code Online (Sandbox Code Playgroud)
如何获得的声明类型a。例如,在类或函数的情况下,ClassDeclaration或者,FunctionDeclration或者Namespace还有类型的名称?
在上面的示例中,
ais是ImportSpecifier,但是当我尝试使用解析它时typeChecker.getSymbolAtLocation,typeChecker.getTypeAtLocation我只得到Identifiertype any。
假设我有一个班级人员如下:
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 的子类,而不是 …
我想编写一个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)
如何修复此编译错误?(我更感兴趣的是了解如何实现这样的功能,而不是为我完成它的库,因此非常感谢解释为什么我的代码不起作用。)
让我们在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().我的问题是,虽然我们没有之间的直接进口依存度不Main和B,被他们仍然被认为是直接依赖?例如,当我分析类之间的依赖关系时?
为什么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行.
假设我有以下 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 上应用“+”?
(顺便说一句,这个例子是人为的,我不是在寻找替代设计。这个例子只是为了说明问题)
java ×6
scala ×2
typescript ×2
annotations ×1
c# ×1
collections ×1
dependencies ×1
flatmap ×1
generics ×1
guava ×1
import ×1
java-8 ×1
java-stream ×1
javassist ×1
jmh ×1
null ×1
ocaml ×1
operators ×1
subclass ×1
syntax ×1
types ×1
wrapper ×1