2014-02-07 3 views
0

Java의 제네릭 클래스에 문제가있어서 해결 방법을 모르겠습니다. 며칠 전에 자바와 제네릭으로 프로그래밍을 시작 했으므로 아주 잘 알려진 문제 일 수 있습니다. 내 클래스 정의는 다음과 같습니다.일반에서 정적 메서드 호출

public Class LocalAuthCommand<T extends LocalAuth> { 
    public LocalAuthCommand() { 
     ... 
    } 

    public String execute() throws CustomException { 
      String result = super.execute(); 
      T obj = T.unMarshall(result); 
    } 
} 

unMarshall은 LocalAuth의 모든 하위 클래스에 구현되는 정적 메서드입니다. 모든 T 클래스는이 메소드를 구현하지만, unMarshall이 T에서 정적 메소드로 존재한다는 것을 Java에 알리는 방법을 모른다. 어떤 아이디어로 이것을 해결할 수 있을까?

감사합니다.

+0

정적 메서드에는 인스턴스가 필요하지 않습니다. –

+0

메서드가 정적이 아닌 것이 좋습니다. –

+0

코드는 기본적으로 일부 XML 문자열 (결과)을 사용하여 T 객체를 생성합니다. XML 문자열 unMarshalling 코드는 T 클래스의 정적 메서드입니다. XML을 사용하여 객체를 작성하기 때문에 정적이어야합니다. 따라서 인스턴스를 사용하지 않아도 메소드를 호출하는 데 사용할 수 있습니다. – AndoverDev

답변

0

T은 런타임시에 삭제되기 때문에 T에 대한 참조는 unMarshall에 대한 호출의 시점에서 경계 클래스 LocalAuth로 대체됩니다.

  1. 가 명시 적으로 unMarshall에 원하는 Class에 전달하고 반사적으로 전화를 걸 :이 주위에 두 가지 방법으로 생각할 수 있습니다.
  2. execute 추상적를 확인하고 각 T에 대한 LocalAuthCommand의 구상 서브 클래스를 생성, 정확한 unMarshall 방법은 각 서브 클래스는 컴파일 타임에 알려져을 위해 전화를 걸도록.
+0

# 2와 함께 갈 것 같습니다. 이는 리플렉션을 사용하지 않고도이를 구현할 수있는 유일한 방법입니다. 감사! – AndoverDev

0

LocalAuth에서 public static String unMarshall(String result) 또는 public abstract String unMarshall(String result) 중 하나를 사용할 수 있습니다. 추상적이고 정적 인 방법을 사용할 수 없습니다.

관련 문제