gpt4 book ai didi

Java 泛型和返回类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:07:28 25 4
gpt4 key购买 nike

我刚刚遇到了一些我不明白的事情。为什么下面的 for each 循环不合法,而第二个循环是合法的?

public interface SomeInterface<T> {
List<SomeNamedObject> getObjects();
void doSomething(P1 p1, T p2);
}

public class SomeNamedObject {
private String text;
}

public class Clazz {

private SomeInterface someInterface;

...

public void someMethod() {
// Error Type mismatch: cannot convert from element type Object to TestClass.SomeNamedObject
for (SomeNamedObject someNamedObject : someInterface.getObjects()) {
// This loop won't compile as the someInterface.getObjects returns just a List and not a List<SomeNamedObject>
}

// Warning Type safety: The expression of type List needs unchecked
// conversion to conform to List<TestClass.SomeNamedObject>
List<SomeNamedObject> objects = someInterface.getObjects();
for (SomeNamedObject someNamedObject : objects) {
// This loop compiles
}
}
}

最佳答案

因为你的实例变量private SomeInterface someInterface未指定其泛型类型参数,则 someInterface 禁用泛型的所有使用.这意味着 someInterface.getObjects()具有原始返回类型 List而不是 List<SomeNamedObject> .这就是第一个示例无法编译的原因。

在第二个例子中List<SomeNamedObject> objects = someInterface.getObjects()正在为列表添加一个显式类型。但是当你这样做时你会看到一个警告,因为不能保证类型安全。这与您在 getObjects() 时看到的行为相同被定义为 List getObjects()没有类型参数。

关于Java 泛型和返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8580051/

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