方法泛型java
A. java 泛型方法報錯!
new Test1().do1((List<String>) ((List) (A.method())));
改成這樣就可以了,具體原因我也不太清楚。
B. java 中如何調用泛型的方法
這種也使用泛型,就很難達到設計的意願,維護起來也相對困難一些。
這要求不是泛型的使用,因為類型不確定,而是要使用反射的方法調用了。
C. java中在定義泛型泛型方法是方法名前加上泛型有什麼作用
static <T> void show(Collection<T> C){
}
//這個泛型方法中定義了一個T類型形參,這個T類型形參可以在該方法內當成普通類型使用。這里無需顯示傳入實際類型參數,無論調用該方法時傳入什麼類型的值,系統都可以判斷出最直接的類型參數。舉個例子給你看可能會更加明白:
import java.util.*;
public class 泛型Test
{
static <T> void show(Collection<T> C)
{
System.out.println("使用泛型 ------->" + C);
}
static void show2(Collection C)
{
System.out.println( C);
}
public static void main(String[] args)
{
Collection<String> C = new HashSet<>();
C.add("第一個元素");
//下面這行代碼調用show方法時會出錯,因為無法通過方法調用轉換將實際參數int轉換為String
//因為編譯器會根據實參推斷類型形參的值,所以系統都可以判斷出最直接的類型參數為String
//C.add(58);
泛型Test.show(C);
泛型Test.show2(C);
Collection d = new HashSet();
//由於java在設計集合時,並不知道我們用它來保存什麼類型的對象,所以便設計成可以保存任
//何類型的對象。同時也帶了問題,集合只是知道它裝了Object類型的值,取出元素時還需要進
//行強制類型轉換,增加了編程復雜度,也容易引發ClassCastException。下面兩行代碼中添加
//兩種不同類型的元素,沒有錯誤。
d.add(2);
d.add("第二個元素");
泛型Test.show(d);
泛型Test.show2(d);
}
}
D. java 泛型的幾種用法
1. public class DAO<T> {
/**
* 泛型類
* 聲明類的同時聲明泛型類型
* 1.方法的返回值可以是使用聲明的泛型類型
* 2.方法的參數也可以是聲明類的泛型類型
* 3.方法體內可以使用泛型類型
*/
public T get(Integer id){
return null;
}
public void save(T entity){
}
}
2.
/**
* 泛型方法: 在方法聲明時, 同時聲明泛型. 在方法的返回值, 參數列表以及方法體中都可以使用泛型類型.
* public static <T> T get(Integer id){
* T result = null;
* return result;
* }
* 把指定類型的數組中的元素放入到指定類型的集合中
*/
E. java怎麼獲取一個泛型方法的真實泛型類型
用gentyref這個工具應該能解決你的問題。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import com.googlecode.gentyref.GenericTypeReflector;
public class ClassWithGenericMethod {
public <T> void chill(List<T> aListWithTypeT) {
System.out.println(GenericTypeReflector.getTypeParameter(aListWithTypeT.getClass(), Collection.class.getTypeParameters()[0]));
}
public void chillWildcard(List<?> aListWithTypeWildcard) {
System.out.println(GenericTypeReflector.getTypeParameter(aListWithTypeWildcard.getClass(), Collection.class.getTypeParameters()[0]));
}
public <T> T chillReturn(Class<T> c) {
T ret = null;
try {
ret = c.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
System.out.println(ret.getClass());
return ret;
}
public static void main(String... args) {
ClassWithGenericMethod cwfm = new ClassWithGenericMethod();
cwfm.chill(new ArrayList<String>(){});
cwfm.chillWildcard(new ArrayList<Integer>(){});
cwfm.chillReturn(ClassWithGenericMethod.class);
}
}
F. java 方法中如何在返回類型使用泛型
樓上幾位好像都不正確。
實際上這是泛型方法的應用
public <T> List<T> getList(Class<T> clazz){
return null ;
}
G. Java中怎樣使用泛型T類的方法
調用泛型方法語法格式如下publicclassExampleA{
public<T>voidf(Tx){
System.out.println(x.getClass().getName());
}
publicstaticvoidmain(String[]args){
ExampleAea=newExampleA();
ea.f("");
ea.f(10);
ea.f('a');
ea.f(ea);
}
}
輸出結果:
java.lang.String
java.lang.Integer
java.lang.Character
ExampleA
使用泛型方法時,不必指明參數類型,編譯器會自己找出具體的類型。泛型方法除了定義不同,調用就像普通方法一樣。
需要注意,一個static方法,無法訪問泛型類的類型參數,所以,若要static方法需要使用泛型能力,必須使其成為泛型方法。
H. java類的泛型方法調用問題
泛型可以用"<T>"代表,任意類型的,泛型方法需要什麼方法類型,直接定義相版應的參數即可。
解釋: 「權<T>」是泛型的默認值,可以被任意類型所代替,如:
List<String> list = new ArayList<String>();這個就定義了一個String類型的」泛型「集合,那麼T的類型就是字元串。
List<String> list = new ArayList<String>();//此處就定義了一個list參數類型,
list.add("StringBatch");//賦值給list
User user = new User();
String str = user.get(list);//這個list就是一個泛型方法值,這行代碼就是泛型方法的調用。
I. java泛型的泛型方法
是否擁有泛型方法,與其所在的類是否泛型沒有關系。要定義泛型內方法,只需將泛型參數列容表置於返回值前。如: publicclassExampleA{public<T>voidf(Tx){System.out.println(x.getClass().getName());}publicstaticvoidmain(String[]args){ExampleAea=newExampleA();ea.f("");ea.f(10);ea.f('a');ea.f(ea);}}輸出結果:
java.lang.String
java.lang.Integer
java.lang.Character
ExampleA
使用泛型方法時,不必指明參數類型,編譯器會自己找出具體的類型。泛型方法除了定義不同,調用就像普通方法一樣。
需要注意,一個static方法,無法訪問泛型類的類型參數,所以,若要static方法需要使用泛型能力,必須使其成為泛型方法。
J. java怎樣聲明泛型方法
在方法返回類型(如String,int,void或其他類)前面添加<T>。
舉個例子public <T> int methodA(){
....
}
這樣泛型參數T就可以在泛型方版法內部使用了,去看權Thinking in java的泛型章,很詳細。
不過初學的話知道容器類後邊加泛型參數就好了