Java 实例化类以允许动态字段

标签 java performance syntax instance instance-variables

我一直在查看一些 java 项目,并发现不同开发人员/项目之间存在这种不一致:

(请注意:对于下面的内容,只有一个 Edibles 永远存在,Edibles 永远不需要有两个 Activity 实例。)

项目1:

public class Edibles1 {

    private final HashMap<Integer, Food> edibleFoods = new HashMap<>();

    private static final Edibles edibles = new Edibles();

    public static Edibles getEdibles() {
        return edibles;
    }

    //external usage for this project:
    public static void main(String[] args) {

        Food foodForId = Edibles.getEdibles().edibleFoods.get(123);
        System.out.println(foodForId);

    }



}

项目2:

public class Edibles2 {

    private static final HashMap<Integer, Food> edibleFoods = new HashMap<>();

    //external usage for this project:
    public static void main(String[] args) {

        Food foodForId = Edibles.edibleFoods.get(123);
        System.out.println(foodForId);

    }



}

请记住,该项目只需要一种 Edibles#edibleFoods。

在文档中,一些使用edibles1的开发人员写道,它更安全吗?尽管也许他们只是想与他们的类保持一致,因为即使该项目只需要一种食物,但类似的类需要多个,因此需要 example1。

那么开发者可能只是想要一致性还是有更深层次的含义/理解?

最佳答案

项目 1 正在(部分)实现 Singleton design pattern 。我的部分意思是它应该有一个私有(private)构造函数,以便其他类只能通过静态 getEdibles() 方法访问单例。

仅当其他类需要访问 Singleton 类并与其交互(获取/设置值、调用方法等)时才需要 Singleton 设计模式

项目2没有实现Singleton DP。该 map 只能由 Edibles2

类的方法访问

关于Java 实例化类以允许动态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51229614/

相关文章:

java - Java 正则表达式中的重音

java - 插入排序-语法问题

python - 'not ==' 和 '!= 之间是否存在逻辑差异(没有 is)

python - 为什么允许在 for 循环中使用列表订阅?

javascript - for循环与反向for循环: performance

Android AssetManager.list() 非常慢

java - Apache Flink Google Pub/Sub 连接器在 intellij idea 中运行抛出 NoClassDefFoundError

java - 仅在 ExecutorService 中提交任务时设置变量值

java - 哪些类由 JVM 加载而不是类加载器?

java - 当每个语句返回某些内容时,使用多个 if 语句而不是 else if