【发布时间】:2016-07-28 15:05:58
【问题描述】:
我碰巧看到了 java.util.Collections 类。无法实例化此类。我猜这是由于私有构造函数的存在。
然后可以以这种方式创建实例-
Class collections = java.util.Collections.class;
Constructor cons = collections.getDeclaredConstructor();
cons.setAccessible(true);
Collections instance = (Collections) cons.newInstance();
首先,Java API 创建者为什么不阻止这种行为?
这让我想到什么时候我真的应该更喜欢 non-instantiable 类而不是 enum?
【问题讨论】:
-
这是两个完全不同的问题。第一个问题的答案是 Java 的反射可以让你打破一些 Java 的规则。这是设计使然。如果你通过反思打破了规则,那么你就会被你所打破的东西咬伤。第二个问题是基于意见的,因此是题外话。
-
Collections:从java 1.2开始;枚举:从 java 5 开始;2 < 5 -
也许他们应该在私有构造函数中抛出异常