error: incompatible types
for (Integer value : task.getIDs()){
required: Integer
found: Object
显然,如果我得到了引用的列表外面的for..每个都没有问题,但不是直接的。
public class InterfaceTest {
public static void main(String[] args) {
Task task = new MyTask();
// no complaints about the type here
List<Integer> values = task.getIDs();
// getting a compiler error for this line
for (Integer value : task.getIDs()){
}
}
}
interface Task<U>{
U doSomething(String value);
List<Integer> getIDs();
}
接口的实现不是演示这一点所必需的,但我不想离开引用task task=null;
而让Answer告诉我这是问题所在。
class MyTask implements Task<Boolean>{
@Override
public Boolean doSomething(String value) {
System.out.println(value);
return false;
}
@Override
public List<Integer> getIDs() {
return Arrays.asList( 1, 2, 3, 4 );
}
}
发生的情况是,当使用具有泛型参数
的类(或接口)但引用不具有
(即raw
类型)的实例时,编译器将从类中擦除所有泛型类型信息。这可能是由于与-1.5之前的源代码兼容,在该源代码中,您根本无法使用泛型类型信息。
考虑一下在Java1.4编译器上编写代码和编译的情况。您希望使用一个利用泛型的库。当从该库中引用具有泛型参数作为原始类型的类型时,编译器强制不使用泛型参数。
编辑:
在处理一些旧代码时,我偶然发现了一个问题,用lambda表达式或方法引用替换了几个匿名类。这个问题有点难以用语言来解释,但我会尽我所能,下面我还添加了一个简短的例子,尽我所能来说明我的问题。 我的示例包括。。。 > 一个函数接口,GenericListener,它接受类型参数V并具有单个方法“GenericCallback(V GenericValue)”。 一个类,CallbackProduce
下面是我试图做的一个非常简单的说明: 最后一个方法调用(consumer.consumer())给了我一个编译器错误 Out projected type’EventConsumer 我知道Kotlin对泛型的要求比Java严格得多,这可能就是它不起作用的原因,但我该如何正确地实现这样的东西呢?
get1方法工作正常,但get2存在编译错误: > 类型A.B的方法get2(集合)必须重写或实现超类型方法 只有带有泛型的参数才会出现此错误<代码>get3编译,但当然有一个警告: > 显然还有其他方法可以解决这个问题,但在我的理解中,这应该是一个法律优先事项,我的问题更多的是为什么会有这个编译错误。提前谢谢! 编辑: 对不起,我的例子不够清楚。因此,这里有一个新的答案来回应你的一些观点。 与上
编译时,此代码将产生以下+错误: 问题是访问中的类型T与列表中的T不相同。如何修复此编译问题?
FoodataEntity:
Java中是否有一种方法可以通过一个方法的声明返回不同的类型? 我希望此方法返回一个对象,并在函数调用时将其转换为正确的类型。这就是我的想法,但它不是这样工作的。我是否需要某种通用返回类型来执行此操作?解决这个问题的最佳方法是什么?