- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我对 Java 的类型推断有疑问。我使用的是 javac 1.8.0_121,以下代码可以使用 Eclipse ECJ 进行编译,但不能使用 javac
import java.util.function.Function;
public class Playbook {
static class A {
}
static class B {
}
static class P<T> {
}
static class V<T> {
static <T, U> V<U> m(P<T> src, Function<? super T, ? extends U> f, Function<? super U, ? extends T> g) {
return null;
}
void b(final P<T> other) {
}
}
public void bindTimeString1(P<A> p1, P<B> p2) {
V.m(p2, s -> new A(), t -> new B()).b(p1);
}
}
使用 javac 编译它会导致以下错误:
[ERROR] Playbook.java:[31,47] incompatible types: main.java.Playbook.P<main.java.Playbook.A> cannot be converted to main.java.Playbook.P<java.lang.Object>
如果没有 m
的第二个参数 g
,代码编译不会出现问题:
导入java.util.function.Function;
public class Playbook {
static class A {
}
static class B {
}
static class P<T> {
}
static class V<T> {
static <T, U> V<U> m(P<T> src, Function<? super T, ? extends U> f) {
return null;
}
void b(P<T> other) {
}
}
public void bindTimeString2(P<A> p1, P<B> p2) {
V.m(p2, s -> new A()).b(p1);
}
}
我不明白为什么这首先会失败。从代码中,编译器可以推断出:
看起来,当 g
存在时,编译器会选择 Object,而当 m
为一元时,编译器会选择 A,尽管 g
没有添加任何有关 U 的内容。
我也很困惑这是否是 ECJ 或 javac 中的问题,因为 ECJ 接受代码而 javac 不接受。只有其中之一是正确的。
最佳答案
我还没有发现任何引用问题,但当前的 Java 9 早期访问版本编译代码时没有错误。由此我得出的结论是,这是 Java 8 中的问题,而不是 ECJ 中的问题。
关于java - javac 和 ecj 的不同类型推断结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42271471/
以下代码创建了一个Collector,它产生了一个UnmodifiableSortedSet: package com.stackoverflow; import java.util.Collecti
我正在使用 ECJ(一种进化算法包),我想调用扩展类中的某些变量,但我不知道如何从问题类中获取它们。 正如您在下面的问题类中看到的,我希望能够在 NetworkGene 类中调用变量 x,但它不起作用
我对 Java 的类型推断有疑问。我使用的是 javac 1.8.0_121,以下代码可以使用 Eclipse ECJ 进行编译,但不能使用 javac import java.util.functi
EJC(Eclipse 的内部 Java 编译器)中有一个错误,我不想等待官方错误修复。有没有办法将现有的 Eclipse 安装(假设是 4.6)指向 4.7 beta 的 ECJ 版本? 我知道,我
使用遗传编程 ECJ 21 ,我正在寻找有关如何序列化 ec.Individual(在成功(?)进化之后)的建议。 诀窍是,然后我需要在稍后阶段反序列化这个 GP,然后执行它......最好在 ECJ
我有一个小问题,在 eclipse 中编译的某些 java 类与由独立 ecj(来自相同的源代码)编译的类略有不同。如何找到 eclipse 正在使用的 ecj 版本? (我假设这就是区别所在) 最佳
注意:这篇文章不是关于 eclipse 创建的用于 java 的 eclipse 编译器——只是为了确保不会造成混淆。 我正在尝试让 ecj 遗传学编程系统在 Windows 上的 eclipse k
我对 elipse.jdt.core 插件做了一些更改,以支持类似于 Java 的语言(MaxJ)。我所做的更改可以在这里找到: https://github.com/maxeler/eclipse.
我有以下代码: package test; import java.util.stream.IntStream; public class A { public static void mai
考虑以下 returnsNull函数并使用泛型类型调用它: public static List returnNull(Class clazz) { return null; } publi
我有以下类(class): import java.util.HashSet; import java.util.List; public class OverloadTest extends Ha
当编译一个 Client 时,它使用接口(interface) I 的某些实现(例如 O),I 的类文件code> 也必须出现在类路径中。奇怪的是,这只是 javac 的情况,因为 Eclipse 编
Eclipse 使用它自己的编译器 (ECJ) 来编译 Java 代码。调试使用 Eclipse 编译的程序更容易,因为可以立即应用简单的代码更改(通过热代码替换)。 另一方面,Maven 使用(默认
今天遇到这个问题,花了很长时间试图重现/弄清楚发生了什么。有人可以解释为什么会发生这种情况,或者这是类型删除/默认方法/lambda/多态性的错误吗?取消对默认方法的注释使其运行良好,但我希望它能按原
我正在运行 1 个生产者线程、1 个消费者线程问题,共享缓冲区和临时缓存(包含 1000 个元素)。 eclipse 执行 (ECJ) 使用 33% 的 CPU(1 个内核用于生产者,1 个用于消费者
尝试运行 hello world grails 应用程序。 我收到此错误: | Error Failed to resolve dependencies (Set log level to 'warn
在 JRE 1.7 中运行时,我从 ECJ(版本 4.2.1)编译器获得 NPE,而同一项目在 JRE 1.6 上可以正确编译。 CompilationProgress 监视器显示总共有 2493 个
尝试运行以下组合: Maven (3.6.1) OpenJDK 11 使用 module-info.java Fails with the following error message: [ERRO
您好 friend ,我是android studio上的新手,安装后我发现问题gradle构建失败,因为 错误:无法下载ecj.jar(org.eclipse.jdt.core.compiler:e
我有一个可以通过 eclipse(ECJ)很好地构建的项目但是 Oracle javac 无法构建它(某些原因,如链接the different of ecj and javac所示)。 我想从ecl
我是一名优秀的程序员,十分优秀!