java 문자열 - Java에서 리플렉션으로 일반 메소드 호출




2 Answers

제네릭은 컴파일 타임에 지워지므로 오류를 판별하기 위해 컴파일러에 추가 정보 만 제공합니다. .class 파일에서 메소드의 서명을 실제로 변경하지는 않습니다.

즉, Java에서 리플렉션을 통해 일반 메소드를 호출하는 것은 Java에서 비 제너릭 메소드를 호출하는 것과 완전히 똑같은 방식입니다. 단, T 유형을 지정하는 대신 Object 유형을 지정해야합니다.

반사 시켜서 정규 메서드를 호출하는 방법에 대한 튜토리얼이 너무 많아서 또 다른 메서드를 추가하는 것을 주저합니다. 그러나 리플렉션을 통해 메서드를 호출하는 방법에 대한 지침이 필요한 경우 아래에 주석을 추가하고 필요한 코드를 추가합니다.

일이 예상대로 작동하지 않는다면, 컴파일 된 클래스 파일에서 항상 javap 를 실행하여 인수 목록에서 올바른 오브젝트를 사용하는지 확인할 수 있습니다. <T extends List> 유형 일반 서명을 지정하면 결과 매개 변수 객체가 실제로 List 객체 일 수 있습니다.

동적 자바

어떻게 자바에서 반사하여 사용자 정의 일반 메서드를 호출?

class Person
{
  public <T> void print(T t)
   {
      System.out.println(t.toString());
   }
}



에드윈의 답변에서 주어진 포인트를 강조하기 위해, 우리가 사용하는 곳은 일반적인 타입으로 확장됩니다.

GenericHibernateDao<T extends Serializable>

, 및 방법

public T save( T entity ) {};

리플렉션을 사용하여 save 메서드를 호출하려면 Serializable 클래스를 사용해야합니다. 즉, 다음을 사용해야합니다.

Method method = GenericHibernateDao.class.getMethod(methodName, Serializable.class);

Object.class를 매개 변수로 사용하지 않습니다.

<T extends Serializable>



Related

java generics reflection