在Java的for-each循环中使用泛型时,出现一个奇怪的编译器错误。这是Java编译器错误,还是我真的在这里遗漏了什么?
这是我全班的:
public class Generics<T extends Object> {
public Generics(T myObject){
// I didn't really need myObject
}
public List<String> getList(){
List<String> list = new ArrayList<String>();
list.add("w00t StackOverflow");
return list;
}
public static void main(String...a){
Generics generics = new Generics(new Object());
for(String s : generics.getList()){
System.out.println(s);
}
}
}
编译器抱怨for-each所在的行:“类型不匹配无法从元素类型Object转换为String。”
如果我进行了微妙的更改,它将编译为:
public static void main(String...a){
Generics<?> generics = new Generics(new Object());
for(String s : generics.getList()){
System.out.println(s);
}
}
我知道getList()
确实使用泛型,但是我以完全不相关的方式使用它们。如果我尝试遍历T类型的某些内容并getList()
返回a
List<T>
或某种内容,我可以理解这一点,但是这里不是这种情况。的返回类型getList()
应该与T完全无关,也不必在乎我是否对Generics对象使用原始类型…对吗?这些不应该是完全无关的,还是我真的在这里错过了什么吗?
请注意,如果执行此操作,代码也会编译,我认为这也应该等效于第一个代码:
public static void main(String...a){
Generics generics = new Generics(new Object());
List<String> list = generics.getList();
for(String s : list){
System.out.println(s);
}
}
区别在于,当您使用原始类型时,成员签名中的 所有 泛型引用也都将转换为其原始格式。如此有效地调用了一个具有如下所示签名的方法:
List getList()
现在,为什么要编译最终版本-尽管可以,但如果使用,则会出现警告-Xlint
:
Generics.java:16: warning: [unchecked] unchecked conversion
List<String> list = generics.getList();
^
这类似于:
List list = new ArrayList();
List<String> strings = list;
…也可以编译,但下面带有警告-Xlint
。
这个故事的寓意是:不要使用原始类型!
问题内容: 游乐场执行失败:MyPlayground.playground:109:22:错误:无效使用’()’调用非函数类型’[ClassA.ClassB.Type]’的值时,让didNotCompile = ClassA.ClassB ^ ~~ 问题答案: 如您所述,它可以使用以下语法: 但是,如果我们声明一个: 因此,我想说这是一个错误,也应该无需输入别名即可工作。 更新 :Apple 已经
我有一个实现Iterable的类,以便用户可以使用迭代器。我使用泛型来允许用户使用任何类型并使用该类。 这是下面的工作代码,没有警告- 但是,如果我将ListIterator定义如下- 我在 Eclipse 中收到警告, 当我在类后指定泛型类型时,它为什么会抱怨?为了能够在我的类中使用Type,我不应该这样做吗?我在定义CustomStackUsingArray时添加了类型,效果很好。
问题内容: 我使用SpringBoot进行REST Web服务开发,并使用SonarQube进行静态分析。 我的应用程序中有一些端点,它们的外观如下: SonarQube抱怨将ResponseEntity与通配符一起使用,并向我报告了一个 严重问题:“返回参数中不应使用通用通配符类型” 。 我想知道是否应该在SonarQube中禁用此验证,或者针对这些情况提出不同的返回类型。 你怎么看待这件事?
我正在尝试编写一个列出目录中所有非隐藏文件的方法。但是,当我添加条件 我的代码无法编译,编译器返回以下错误: 我试图捕捉< code>IOException,但是编译器仍然拒绝编译我的代码。我遗漏了什么明显的东西吗?代码如下所示。
[Error]org.testng.testngException:无法将@Test annotated方法[testLoginPage]与[interface java.util.Map]插入。有关本机依赖项注入的更多信息,请参阅http://testng.org/doc/documentation-main.html#native-dependent ency-injection at org