[英]Java Hello World to pass CheckStyle
所以我是使用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
類創建一個私有構造函數並使默認參數最終?
對於像Main類這樣的Utility類,最好創建一個私有構造函數,以便不讓java編譯器自己編寫默認的no args構造函數Main()
。
在將參數發送到方法之前,Java總是復制參數。 這里的final關鍵字僅表示在方法內部無法重新分配變量。 (請注意,如果你有一個像你的情況String[]
的最終對象,你仍然可以改變對象的屬性)。
您可能需要至少創建一個私有構造函數,添加:
/**
* Private default constructor
*/
private HelloWorld () {
}
這應該讓它消失。 這里的原因是因為Java編譯器“認為”你想要創建一個實用程序類,因為它只看到公共靜態方法。 在這種情況下,最好的做法是擁有一個私有默認構造函數。
對於這個“Hello World”示例,可以這樣做。 但是在RL代碼中,您希望從HelloWorld
類創建一個實例,然后添加一個“business”方法(包含您的邏輯的方法)。
編輯:第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
,它將編譯,但會向您發出更改參數的警告。 這會導致意想不到的副作用,(稍后在較大的項目中)方法已將某個參數更改為“某處”。
試着想象一下:+ 200k行代碼(沒有評論!),參數沒有final
......完美的混亂......
接受的答案的海報說了這里,這里有更多的細節和一個很好的理由。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.