2011-03-04 4 views
4

안녕하세요 저는 일반적인 인수를 기반으로 정적 함수를 호출하는 함수를 작성하려고합니다. 나는 다음과 같은 코드가 있어요 :제네릭에 대한 Java 정적 함수

public class Model<T extends Listable> 
{ 
    private Document doc; 

    /* 
     When the JavaBean is created, a Document object is made using 
     the Listable parameter. The request string for the specific 
     type is used to pull XML-data from the cloud. 
    */ 
    public Model() 
    { 
     try 
     { 
      doc = cloud.request(T.getRequestString()); 
     } 
     catch(Exception e) 
     { 
     } 
    } 

    /* 
     getMatches (used in JSP as "foo.matches") generates a list 
     of objects implementing the Listable interface. 
    */ 
    public List<Listable> getMatches() 
    { 
     return T.generateMatches(doc); 
    } 
} 

을 어떻게, 그냥 정적 컨텍스트에 대해 뭔가를이 받고 있어요 않습니다 않습니다. '정적이 아닌 메서드 generateMatches(org.jdom.Document)은 정적 컨텍스트에서 참조 할 수 없습니다.'

답변

4

켜지고 코멘트 :

당신은 T 타입의 인스턴스 변수를 소개하고 그에 generateMatches를 호출 할 수 있습니다. TypeM 자체에서는 generateMatches를 호출 할 수 없습니다.

예 : 당신이 다음이 작업을 수행 할 수 있습니다

private T instanceOfT; 

public Model(T instanceOfT){ 
    this.instanceOfT= instanceOfT; 
} 

당신의 getMatches의 방법 : 개인 변수에 생성자를 통해 인스턴스 변수를 주입하고 저장할

return instanceOfT.generateMatches(doc); 
+0

+1, 약속대로 :-) –

+0

최고이지만 받아 들일 수없는 해결책을 받아 들였습니다. - C++로 변경 – Skeen

0

무엇이 문제입니까?

이유는 분명합니다. "T.generateMatches (doc);" T를 통해 generateMatches를 호출하고 T는 인스턴스가 아닌 유형 (클래스/인터페이스)입니다.

+0

오른쪽이 잘 어떻게 내 위의 코드 작업을해야한다, 그 질문이 맞습니다. – Skeen

+1

유형 T의 인스턴스 변수를 소개하고 유형 T가 아닌 generateMatches를 호출하십시오. –

+0

@Eric이 페이지에서 첫 번째로 적합한 사람입니다. 왜 이것을 답으로 추가하지 않겠습니까? –

2

T의 개체를 처리 할 수 ​​없다는 것이 문제입니다. 그냥 T.generateMatches(doc)이라고하면 T 클래스의 정적 메서드에 대한 정적 호출을한다는 의미입니다. 인스턴스 메소드를 호출하려면 변수T이어야합니다. 대답에