Java 中的反射 (java.lang.reflect):
透過反思,有可能:
反射的缺點:
編譯時類型檢查遺失:
繁瑣的程式碼:
反射需要更複雜且可讀性較差的程式碼。
例:
Method method = obj.getClass().getMethod("methodName"); method.invoke(obj, args);
表現不佳:
反射的應用:
有限使用反射:
建議技術:僅使用反射在編譯時實例化未知類,並透過已知介面或超類來引用這些實例。
範例:
建立 Set 實例的程序,由命令列指定:
Class<? extends Set<String>> cl = (Class<? extends Set<String>>) Class.forName(args[0]); Constructor<? extends Set<String>> cons = cl.getDeclaredConstructor(); Set<String> s = cons.newInstance(); for (int i = 1; i < args.length; i++) { s.add(args[i]); } System.out.println(s);
範例中說明的缺點:
運行時異常:
複雜性與冗長:
未經驗證的演員警告:
反射的合法使用:
結論:
反射很強大,但它也有很多缺點。
只要有可能,僅使用反射來實例化物件並透過編譯時已知的介面或超類別存取它們。
書中的範例:
以上是Item 喜歡介面而不是反射的詳細內容。更多資訊請關注PHP中文網其他相關文章!