gpt4 book ai didi

java - 为什么这段代码不可编译

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:04 24 4
gpt4 key购买 nike

这是一小段代码,我不明白为什么 javac 不能编译它。我想念什么?有没有错误?

public class HelloWorld<T> {
private static enum Type {
}

private T value;
private List<Type> types = new ArrayList<>();

public T getValue() { return value; }

public List<Type> getTypes() { return types; }

public static void main( String[] args ) {
for ( Type type : new HelloWorld().getTypes() ) { // Error: Type mismatch: cannot convert from element type Object to HelloWorld.Type

}
}
}

为什么 getTypes() 返回一个 Object(原始)列表,而它应该是 Type 列表?

Link to online compiler

最佳答案

这对我来说似乎是一个编译器限制。 getTypes总是返回 List<Type> , 所以使用原始 HelloWorld类型应该没有区别。

也就是说,这两种解决方案中的任何一种都可以克服错误:

  1. 创建 HelloWorld 的参数化类型而不是原始类型:

    for (Type type : new HelloWorld<Integer>().getTypes() ) { // any type will do, I chose 
    // Integer arbitrarily to show
    // that it doesn't matter

    }
  2. 在使用之前使用局部变量来存储列表:

    List<Type> types = new HelloWorld().getTypes();
    for (Type type : types) {

    }

无论如何,参数化类型应始终优先于原始类型,因此我将使用第一个解决方案(使用在您的类中有意义的任何类型参数)。

关于java - 为什么这段代码不可编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31400848/

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