有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我碰巧看到了java。util。收藏类。不能实例化这个类。我猜这是因为存在一个私有构造函数

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

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

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

它让我思考什么时候我真的更喜欢非实例化类而不是枚举类


共 (1) 个答案

  1. # 1 楼答案

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

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

    当您拨打静态电话时;或者,当您直接调用某个枚举实例上的方法时,只需创建难以测试的代码。 因为,在某个时刻,您可能想要模拟事物。为了模拟静态/枚举调用。。。您需要Powermock/ito。而那些模仿框架操纵着你的字节码,在我看来,它们带来的麻烦远比它们带来的好处多得多

    尽管有一个很好的模式,将枚举用作单例,实现接口,请参见我的一些旧答案here