簡體   English   中英

實用 class 替代私有 static 字段

[英]Utility class alternative for private static field

import java.io.File;

public final class MultiplatformUtility {
    private static final String SEPARATOR = File.separator;

    private MultiplatformUtility() { }

    public static String getSeparator() {
        return SEPARATOR;
    }
}

我希望 SEPARATOR 在一個唯一的文件中。 有沒有辦法避免在這里使用實用程序 class 但保持 SEPARATOR 字段 static 和私有?

編輯:Class 中的 ENUM 怎么樣?

import java.io.File;

public class Multiplatform {

    public enum Common {
        SEPARATOR(File.separator);
    
        private final String separator;

        Common(final String separator) {
            this.separator = separator;
        }

        public String getSeparator() {
            return separator;
        }
    }
}

在我看來,將SEPARATOR設為private是沒有意義的,同時考慮到它是java.io.Filepublic成員,因此您正在限制現有字段的訪問限定符。 這違反了封裝和 inheritance 最佳實踐。

請記住,當您將其設為private時,只有 class 才能訪問其值,除非您提供特定的方法來訪問它,就像您對MultiplatformUtility所做的那樣。
作為您的目標的可能解決方案,您可以在一個單獨的文件中擁有一個public abstract class,並使該字段受到保護,因此只有擴展您的抽象 class 的類才能訪問它。 就個人而言,這不是最佳做法。

通常,您定義一個interface並在其中添加所有常量,以便應用程序中的所有類都可以使用它,但在這種情況下,每個常量默認為public static final

更好的是,您可以在分隔的 class 中定義一個enum ,就像在您的示例中一樣,這給您帶來比接口更多的優勢,因為您可以通過隱式擴展java.lang.Enum獲得一些實用功能,另外您還可以定義字段、方法和實現接口。

暫無
暫無

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

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