gpt4 book ai didi

java - 使用 List<> 方法的 Java 通用接口(interface)上的编译器错误

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:56 24 4
gpt4 key购买 nike

<分区>

我不明白以下代码导致的编译器错误。我定义了一个通用接口(interface),参见 Task,有两个方法:U doSomething(String value)List<Integer> getIDs() . doSomething() 方法实际上使用通用类型作为其返回值的类型,但似乎没有引起问题。 getIDs()方法返回一个 List,它与 Task 的类型无关,但在使用 for..each 语句迭代返回值时会导致问题。出现以下编译错误。

error: incompatible types
for (Integer value : task.getIDs()){
required: Integer
found: Object

似乎接口(interface)上的类型删除导致编译器忘记了第二个方法上声明的类型,这与泛型类型无关。 或者换句话说,为什么接口(interface)上的通用类型会影响编译器如何理解 getIDs() 上的返回值?方法,特别是在 for..each 语句的上下文中?

显然,如果我在 for..each 之外获取对列表的引用,则没有问题,但不是直接的。

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();
}

接口(interface)的实现不是证明这一点所必需的,但我不想留下引用 Task task = null;并有答案告诉我这就是问题所在。

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 );
}
}

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com