【问题标题】:Generic Type Warngings通用类型警告
【发布时间】:2012-10-02 12:05:09
【问题描述】:

我刚刚安装了 jdk1.7.0_07,我突然被大量关于泛型原始类型的警告所淹没。 (我收到了数百个,它们混淆了其他可能有意义的警告。)据我所知,这些错误不应该产生,我没有用 java-6-openjdk-i386 得到它们。

我创建了以下小示例。 (每个类都在自己的文件中。)

public interface Generic<T> {
    public T get( );
}

public class Test {

    public Test safeAsHell( Generic thing, int number ) {
        return new Test( );
    }

    public void safeAsHell( Generic thing ) { }

}

当我尝试编译这个 (javac -Xlint) 时,我收到以下警告:

Test.java:3: warning: [rawtypes] found raw type: Generic
    public Test safeAsHell( Generic thing, int number ) {
                        ^
  missing type arguments for generic class Generic<T>
  where T is a type-variable:
    T extends Object declared in interface Generic
Test.java:7: warning: [rawtypes] found raw type: Generic
    public void safeAsHell( Generic thing ) { }
                        ^
  missing type arguments for generic class Generic<T>
  where T is a type-variable:
    T extends Object declared in interface Generic
2 warnings

添加Object 作为泛型类型参数(Generic&lt;Object&gt; thing)解决了这个问题。我原以为GenericGeneric&lt;Object&gt; 类型是等价的。我忽略了什么吗?

【问题讨论】:

标签: java generics


【解决方案1】:

Generic&lt;Object&gt; 是参数化类型,而Generic 是原始类型。这就是警告的原因。

【讨论】:

  • 我刚刚检查了 Naftalin 和 Wadler 的 JavaGenerics 副本,我找不到他们没有添加类型参数的任何情况,所以你可能是对的.我仍然不明白为什么我之前没有收到这些错误(我总是用-Xlint 编译)。看来我有很多清理工作要做。
  • @MarcvanDongen:可能是带有 javac 标志的 open-jdk。不过我不确定,从未使用过open-jdk。我不认为你删除了一些抑制警告未经检查的注释。
  • 如果没有 -Xlint 标志,我不会收到警告。添加标志只会迫使javac 对其认为不安全的内容非常迂腐。
猜你喜欢
  • 1970-01-01
  • 2020-05-22
  • 2012-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多