爲什麼java不會阻止你實例化任何單例類對象?爲什麼我可以使用反射創建一個以上的單例實例?
我試圖創建太虛類
java.lang.Void
的對象我寫了這個代碼來創建兩個實例
try{
Class clazz = Void.class;
Constructor cons = clazz.getDeclaredConstructor();
cons.setAccessible(true);
Void s2 = (Void) cons.newInstance();
System.out.println(s2);
Void s3 = (Void) cons.newInstance();
System.out.println(s3);
}catch (Exception e) {
e.printStackTrace();
}
任何人都可以解釋 - 爲什麼這是允許在java嗎?
使用Singleton模式並不能保存您通過'Reflection'創建的實例。你可以使用'Reflection'來訪問私人領域和構造函數。所以,它不是'Java'允許的。它的Reflection API違反了規則。 –
'Void'不是單例,順便說一下,它的意圖是有_no_實例,因爲它的目的僅僅是作爲'Void.TYPE'的容器,符合其他基本類型'Class'對象'int'的Integer.TYPE等)。 –