2014-02-07 44 views
0

我在Java中有一個泛型類的問題,我不知道如何解決它。我幾天前開始用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類都實現了這個方法,但是我不知道如何讓Java知道UnMarshall在T中是否存在靜態方法。任何想法如何解決這個問題?

謝謝!

+0

靜態方法不需要實例。 –

+0

看起來好像這個方法不是靜態的。 –

+0

代碼的功能基本上是用一些xml字符串(結果)構造一個T對象。解組XML文件的代碼是T類中的靜態方法。我需要它是靜態的,因爲我用XML構建了一個對象,所以我沒有一個實例可以用來調用該方法。 – AndoverDev

回答

0

T在運行時被擦除,所以T參考在呼叫到unMarshall的點取代有邊界類LocalAuth。我能想到的解決此兩種方式:

  1. 明確地傳遞你想要的ClassunMarshall和撥打電話反思。
  2. 使execute摘要併爲每個T創建一個LocalAuthCommand的具體子類,以便在編譯時確切知道要爲每個子類調用的unMarshall方法。
+0

我想我會去#2 ,它是實現這一點而不必使用反射的唯一方法。謝謝! – AndoverDev

0

在LocalAuth中,您可以有public static String unMarshall(String result)public abstract String unMarshall(String result)。你不能有一個既抽象又靜態的方法。