繁体   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