代码之家  ›  专栏  ›  技术社区  ›  idude

Java Hello World要通过CheckStyle

  •  4
  • idude  · 技术社区  · 7 年前

    所以我对使用checkstyle很陌生,对于我的简单HelloWorld java程序,我收到了很多我不理解的错误。

    package <package_name>;
    
    /**
    * A simple class to compile.
    */
    public class HelloWorld {
    
     /**
      * @param args standard main parameters
      */
    
        public static void main(String[] args) {
            System.out.println("hello world");
        }
    }
    

    Line 6: Utility classes should not have a public or default constructor
    Line 10: Parameter args should be final
    

    为什么会发生这种情况?我有必要为我的 main 类并使默认参数为最终参数?

    3 回复  |  直到 7 年前
        1
  •  4
  •   jeanr    7 年前

    对于像主类这样的实用类,最好创建一个私有构造函数,以避免java编译器将自己编写为默认的无参数构造函数 Main() .

    Java总是在将参数发送到方法之前复制参数。这里的最后一个关键字只意味着在方法内部不能重新分配变量。(请注意,如果您有一个像这样的最终对象 String[]

        2
  •  2
  •   Ivan Pronin    7 年前

    第1个问题已回答 here here HelloWorld private 构造函数。

    第2版-已声明 here final

        3
  •  1
  •   Roland wittakarn    7 年前

    也许 需要至少创建一个私有构造函数,请添加以下内容:

    /**
     * Private default constructor
     */
    private HelloWorld () {
    }
    

    这应该可以解决问题。这里的原因是因为Java编译器“认为”您想要创建一个实用程序类,因为它只看到公共静态方法。在这种情况下,最好使用私有默认构造函数。

    HelloWorld 类,然后向其中添加“业务”方法(包含逻辑的方法)。

    编辑: 第10行中的警告很好,因为使用 final

    public class Foo {
        public Foo () {
        }
    
        public void doBar (final Bar bar) {
            // Won't work:
            bar = null;
    
            // Will work!
            bar.callMe();
        }
    }
    
    public class Bar {
        public Bar {
        }
    
        public void callMe () {
            // Do something
        }
    }
    

    现在把它去掉 最终的 它将编译,但会向您发出警告,您更改了一个参数。这会导致意外的副作用,即(稍后在较大的项目中)一个方法“在某处”更改了某些参数。

    试想一下:+20万行代码(没有注释!)而且没有 最终的 对于参数…一个完美的混沌。。。