2013-01-10 39 views
1

我目前正在一個項目中,我必須使一些方法通用(使代碼更具可讀性)。我怎樣才能使Java方法通用?

該項目有兩個類:BoxMyList。 'Box'的構造函數接受通用參數; 'MyList'的構造函數只有一個。

public class Box<A, B> {} 

這是箱子的類。

public class MyList<T> {} 

而這就是MyList的類。

在類的「盒子」我有一個看起來像這樣的方法:

public static MyList enclose (Box <MyList <Integer, String>> t) { 
// Here comes some code that is not important right now. 
} 

我現在想什麼,是讓這個方法通用的,因此,它不僅像一個Box參數需要。有沒有人有想法?

+0

在Google上搜索真的很難嗎? - > http://docs.oracle.com/javase/tutorial/extra/generics/methods.html – x4rf41

+0

我不認爲你可以用一種有意義的方式來做到這一點,除非你有一個共同的接口,你想支持的所有類這裏。 – Thilo

+0

還是你問如何防止硬編碼的「」? – Thilo

回答

0

它不是完全清楚自己想要做什麼,和通用參數的數量不匹配你的類,但也許這樣做的工作?

public <T> static MyList<T> enclose (Box <MyList <T>, String> t) { 
// Here comes some code that is not important right now. 
} 

或者,如果你想避免談論MYLIST,也許這:

public <T> static T enclose (Box <T, String> t) { 
// Here comes some code that is not important right now. 
} 

第二個版本具有Box對象作爲它的返回類型的第一個通用參數的類型...

+0

會嘗試! – user1420042

0

嘗試

public static <T> MyList<T> enclose(T t) { 
    return new MyList<T>(); 
} 

public static void main(String[] args) { 
    MyList<Box<String, String>> res = enclose(new Box<String, String>()); 
} 
0
public static <T, S> MyList<T> enclose(Box <MyList<T>, S> box) {} 

Java沒有higher kinded types,所以上面是java允許的通用類型。

另外,無需MyList<T>

public static <T, S> T enclose(Box <T, S> box) {} 

的要求,希望這些2個例子給你如何在特定的情況下,仿製藥申報一個粗略的想法。