Java Hello World传递CheckStyle

时间:2017-08-01 20:28:40

标签: java checkstyle

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

我的代码:

curl localhost:4000/something/15
curl localhost:4000/something/15?search=bob

def index(conn, %{"id" => id}) do
end

def index(conn, %{"id" => id}, "search" => search }) do
end

我收到了错误:

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 类创建一个私有构造函数并将默认参数设为final?

3 个答案:

答案 0 :(得分:4)

对于像Main类这样的Utility类,最好创建一个私有构造函数,以免让java编译器自己编写默认的no args构造函数Main()

Java在将参数发送到方法之前总是复制参数。这里的final关键字仅表示在方法内部无法重新分配变量。 (请注意,如果您的最终对象类似于您的String[]},您仍然可以更改对象的属性。)

答案 1 :(得分:2)

第1期问题已解答here,并已记录here。简短的回答是,您没有向x类提供任何实例成员,那么为什么要允许它们创建实例?这就是为什么建议创建function loadFile() { var xhttp = new XMLHttpRequest(); var x; // The onreadystatechange callback function will execute // at some future point after loadFile has completed, so // you can only gain access to the AJAX result from within // that function. xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { x = this.responseText; parseResponse(x); return x; } } xhttp.open("GET", "wordList.csv", true); xhttp.send(); } 构造函数的原因。

第2期 - 陈述here。简短回答 - 在执行方法算法期间更改参数值可能会造成混淆,应该避免。这就是为什么建议他们宣布HelloWorld

的原因

答案 2 :(得分:1)

可能需要至少创建一个私有构造函数,添加:

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

那应该让它消失。这里的原因是因为Java编译器&#34;认为&#34;你想创建一个实用程序类,因为它只看到公共静态方法。在这种情况下,最好使用私有默认构造函数。

为此&#34; Hello World&#34;这样做很好。但是在RL代码中,您希望从HelloWorld类创建一个实例,然后添加一个&#34; business&#34;方法(包含你的逻辑的方法)。

修改第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
    }
}

现在只需删除final,它就会编译,但会向您发出更改参数的警告。这会导致意想不到的副作用,(稍后在较大的项目中)方法已经改变了一些参数&#34;某处&#34;。

试着想象一下:+ 200k行代码(没有评论!)和参数没有final ......一个完美的混乱......

接受的答案的海报说了,这里有更多细节,这是一个很好的理由。