方法泛型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的泛型章,很详细。
不过初学的话知道容器类后边加泛型参数就好了