簡體   English   中英

帶有常量的Java final類

[英]Java final class with constant

我必須定義一個類,它所做的就是保持常量。

public static final String CODE1 = "100";
public static final String CODE2 = "200";

現在我想在其他類中使用這些值。 將此類用作靜態類或實例化它會更好嗎?

謝謝。

注意:我知道枚舉,但在這種情況下,我必須使用一個類。

只是為了使用這些值,你當然不應該實例化這個類。 僅僅因為你可以像訪問實例成員一樣訪問靜態成員並不意味着它是個好主意。

如果類真的只包含常量 - 並且如果你確定這是一個好主意,而不是那些與它們直接相關的類中出現的常量 - 你應該把它變成final帶有私有構造函數的final類,這樣就沒有了可以毫無意義地實例化它:

public final class Codes {
    public static final String CODE1 = "100";
    public static final String CODE2 = "200";

    // Prevent instantiation
    private Codes() {
    }
}

Don的回答建議使用枚舉也是一個非常好的主意 - 它意味着您可以在API中使用Code而不需要精確的字符串表示,這可以防止您意外使用非代碼值。

Jons的回答是正確的,雖然我想向你展示一個帶枚舉的解決方案。 訪問其String值存在缺點,因為您必須調用Code.CODE1.text()而不是Code.CODE1

public enum Code {

    CODE1("100"), CODE2("200");

    private String text;

    Codes(String text) {
        this.text = text;
    }

    public String text() {
        return text;
    }
}

java語言規范和JVM規范允許您執行任何您想要的操作,無論是實例化類還是使用final或使用其他方式....

只需使用Eclipse並嘗試!

雖然有一些好的做法,Jon Skeet的回答是一個很好的做法。

Java語言不支持全局變量

public class ComonFun {
    public static final String CODE1 = "100";
    public static final String CODE2 = "200";

    public static String CODE1(){
        return CODE1;
    }
    public static String CODE2(){
        return CODE2;
    }
}

實行

public class Main {

    public static void main(String[] args) {
        System.out.println(ComonFun.CODE1());
        System.out.println(ComonFun.CODE2());
    }
}

我認為你只需要聲明一個接口,你就不需要指定子句“public static final”。 它可以用於大廳項目。

使用它們作為靜態,不要去實例化。

甚至使用靜態導入作為一種好處。

package coma;

import static coma.ImportStatments.*;

public class UsingClass {
    public static void main(String[] args) {
        System.out.println(CODE1);
    }
}

帶有final變量的類看起來像這樣:

package coma; 
public class ImportStatments {  
    public static final String CODE1 = "100";   
    public static final String CODE2 = "200"; 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM