我碰巧看到了 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/