2011-12-02 95 views
3

是否可以根據參數更改Java中的方法簽名?Java。如何更改方法簽名

實施例:

給定的類,與通用參數MyItem<T>。 假設這個類有一個方法,返回T 給定第二個類'myReturner()',其中包含方法myreturn(MyItem<T>)

問:

我可以做回myreturn(MyItem<T>)一個T類型的對象,這取決於MyItem的泛型參數?

我想這是不可能的,因爲簽名是在Java編譯期間設置的,並且T在編譯時不知道。 如果是這樣,模擬一個方法的最好方法是什麼,它會根據參數返回不同的對象? 正在爲每個參數類型編寫一個自己的方法的唯一途徑?

+0

,爲什麼它是可能的:編譯Java時,只輸出'對象myreturn(MyItem)'的方法,刪除任何通用信息。這種方法顯然可以接受任何對象。 – Viruzzo

+0

據我猜測,Viruzzo的鏈接應該在這個鏈接的某處:docs.oracle.com/javase/tutorial/java/generics/methods.html – Crowie

回答

7

這樣的事情?

private <T> T getService(Class<T> type) { 
    T service = ServiceTracker.retrieveService(type); 
    return service; 
} 
3

你的意思是這樣的:

<T> T myMethod(MyItem<T> item) 

0

你可以,如果你還讓全班通用於同一類型的T,是這樣的:

import java.util.ArrayList; 

public class MyReturn<T> { 

    public T myReturn(ArrayList<T> list){ 
     return null; //Your code here 
    } 
} 
0

我想你想是這樣的:

public static void main(String[] args) { 
    String bla = myMethod(new MyItem<String>()); 
} 

public static <T> T myMethod(MyItem<T> item) { 
    return null; 
} 

public class MyItem<T> { 
    //just a dummy 
}