【问题标题】:Javac flag to disallow raw types?Javac标志禁止原始类型?
【发布时间】:2009-03-30 16:15:21
【问题描述】:

是否可以传递任何 Java 编译器标志来告诉编译器禁止使用原始类型?也就是说,对于任何泛型类,让编译器强制使用参数化版本,否则抛出编译错误?

【问题讨论】:

    标签: java generics javac


    【解决方案1】:

    JDK7 (b38) 引入了-Xlint:rawtypes。如上所述,-Xlint:unchecked 会针对未经检查的转化发出警告。

    javac 团队的 Maurizio Cimadamore 写了一封 weblog entry 关于它。

    【讨论】:

    【解决方案2】:

    您可以在 Eclipse 中将原始类型的使用配置为警告或错误。

    它位于 Preferences / Java / Compiler / Errors and Warnings / Generic types / Usage of a raw type。

    据我所知,javac 没有类似的内容 - 即使使用 -Xlint:all,您也不会收到类似以下内容的警告:

    ArrayList x = new ArrayList();
    

    【讨论】:

    • 你应该会收到来自 JDK7 (b38) 的警告。
    • (虽然我相信 Eclipse 默认使用 JDT(?) 编译器。)
    【解决方案3】:

    您可以通过以下方式获得警告:

    -Xlint:未选中

    这将在某些(但不是全部)缺少泛型的情况下产生警告。

    import java.util.ArrayList;
    import java.util.List;
    
    public class Main
    {
        public static void main(final String[] argv)
        {
            List list = new ArrayList(); // no warning at all
    
            list.add("Hello"); // warning will be on this line
        }
    }
    

    鉴于警告,您可以返回并修复代码以将泛型添加到声明中。

    不理想,如果我没记错的话,它仍然无法捕捉到所有内容。

    【讨论】:

      猜你喜欢
      • 2016-11-24
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 2012-07-04
      • 2020-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多