我碰巧看到 java.util.Collections 类。一个人无法实例化这个类。我想这是由于存在私有构造函数。
然后可以用这种方式创建实例 -
Class collections = java.util.Collections.class;
Constructor cons = collections.getDeclaredConstructor();
cons.setAccessible(true);
Collections instance = (Collections) cons.newInstance();
首先,为什么Java API创建者没有停止这种行为?
我觉得我应该什么时候真的更喜欢不可实例化的类而不是枚举?
答案 0 :(得分:1)
第二个问题的简短回答:只需避免两者。
冗长的答案:实际上两种选择都不是很好。问题是:您总是希望编写 easy 代码进行测试。
当你进行静态电话时;或者当您直接在某个枚举实例上调用方法时,您只需创建 hard 代码进行测试。 因为,在某些时候,您可能想要模拟事情。并且为了模拟静态/枚举调用......你需要Powermock / ito。那些嘲弄框架操纵你的字节码,在我看来,比他们做的更麻烦。
虽然使用枚举作为单身,实现接口,但有一个很好的模式,请参阅我的here的旧答案。