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);
예에 표시된 단점:
런타임 예외:
복잡성과 장황함:
확인되지 않은 캐스트 경고:
적절한 반사 사용:
결론:
반사는 강력하지만 단점도 많습니다.
가능하다면 리플렉션을 사용하여 객체를 인스턴스화하고 컴파일 타임에 알려진 인터페이스나 슈퍼클래스를 통해 객체에 액세스하세요.
책의 예:
위 내용은 항목 리플렉션보다 인터페이스를 선호합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!