[英]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.File
的public
成員,因此您正在限制現有字段的訪問限定符。 這違反了封裝和 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.