gpt4 book ai didi

java - 什么时候使用不可实例化的类而不是枚举?

转载 作者:行者123 更新时间:2023-11-30 10:41:05 25 4
gpt4 key购买 nike

我碰巧看到了 java.util.Collections 类。不能实例化此类。我猜这是由于存在一个私有(private)构造函数

然后可以用这种方式创建实例-

Class collections = java.util.Collections.class;    
Constructor cons = collections.getDeclaredConstructor();
cons.setAccessible(true);
Collections instance = (Collections) cons.newInstance();

首先,为什么 Java API 的创建者没有阻止这种行为?

我想什么时候我应该更喜欢不可实例化类而不是枚举

最佳答案

第二个问题的简短回答:简单地避免两者

冗长的回答:实际上这两个选项都不是很好。问题是:您总是希望编写易于测试的代码。

当您进行静态调用时;或者当您直接调用某些枚举实例的方法时,您只是创建了难以测试的代码。因为,在某些时候,您可能想要模拟 事物。为了模拟静态/枚举调用......你需要 Powermock/ito。那些模拟框架会操纵您的字节码,在我看来,造成的麻烦多于带来的好处。

尽管将枚举用作单例、实现接口(interface)有一个很好的模式,请参阅我的一些较旧的答案 here .

关于java - 什么时候使用不可实例化的类而不是枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38640189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com