何时使用不可实例化的类而不是枚举?

时间:2016-07-28 15:05:58

标签: java enums singleton

我碰巧看到 java.util.Collections 类。一个人无法实例化这个类。我想这是由于存在私有构造函数

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

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

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

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

1 个答案:

答案 0 :(得分:1)

第二个问题的简短回答:只需避免两者

冗长的答案:实际上两种选择都不是很好。问题是:您总是希望编写 easy 代码进行测试。

当你进行静态电话时;或者当您直接在某个枚举实例上调用方法时,您只需创建 hard 代码进行测试。 因为,在某些时候,您可能想要模拟事情。并且为了模拟静态/枚举调用......你需要Powermock / ito。那些嘲弄框架操纵你的字节码,在我看来,比他们做的更麻烦。

虽然使用枚举作为单身,实现接口,但有一个很好的模式,请参阅我的here的旧答案。