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

标签 java enums singleton

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

相关文章:

mysql - 枚举类型和 MySQL

java - 如何实现枚举类型的某些方法

java - 在几个不相关的类中使用的 Java 中在哪里定义常量

应用程序池的 C# .NET 单例生活

Java 布局,如何最大化固定高度的 Pane 以及填充屏幕其余部分的 Pane !

java - 使用 null 参数调用对任意对象的方法引用时出现 NullPointerException

java - JavaDocs 中 "<T> T"和 "T"返回类型有什么区别

java - 将泛型集合转换为数组

java - 我需要与许多其他对象共享一个对象——我读过关于单例的投诉,那么我应该使用什么来代替?

function - 检查函数的参数是否为函数