>source

파싱하고 싶습니다java.lang.reflect.Type. 예를 들어 인터페이스가 있습니다.이와 같이:

interface Foo {
    List<String> bar ();
}

메소드의 반환 유형을 검색할 수 있습니다.술집()이와 같이:

Method method= Foo.class.getMethod("bar");
Type type= method.getGenericReturnType();

변환하고 싶을 때유형대상으로, 매우 간단합니다.

String typeName= type.getTypeName(); //"java.util.List<java.lang.String>"

하지만 이것을 변환하는 방법을 모르겠습니다.돌아가다유형:

Type type= SomeMagicalTypeParser.parse("java.util.List<java.lang.String>");

로드가 가능하다는 것을 알고 있습니다.등급에서, 그러나 단순하고 제네릭이 아닌 클래스만 로드할 수 있습니다. 즉,Class.forName("java.lang.String")작동하지만Class.forName("java.util.List<java.lang.String>")던질 것이다ClassNotFoundException.

이 작업을 수행할 수 있는 방법이 있습니까? 감사합니다.

형식 삭제 및 런타임에 제네릭 형식을 더 이상 검색할 수 없는 이유에 대해 읽고 싶을 수 있습니다.

Matteo NNZ2022-02-06 08:12:13

제네릭 유형은 런타임에서 액세스할 수 없으며 컴파일 시간에만 액세스할 수 있습니다.

Orr Benyamini2022-02-06 08:12:13

@Matteo 그러면 getGenericReturnType()이 무엇을 의미하는지, 그리고 이것이 java.util.List(런타임에)으로 인쇄되는 ParameterizedType을 어떻게 반환하는지 궁금합니다! ((해당 문자열에서 유형을 생성하는 것과 관련이 있음))

user163206752022-02-06 08:12:13

@Orr 이전 댓글과 동일

user163206752022-02-06 08:12:13
  • 이전 python : PostgresQL 및 pyodbc에서 RETURNING 절이 있는 UPDATE 문
  • 다음 SSI timefmt는 시간의 선행 0을 억제합니다.