泛型类中的Java泛型方法

泛型类中的Java泛型方法

本文介绍了泛型类中的Java泛型方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果您在Java中创建泛型类(该类具有泛型类型参数),那么您可以使用泛型方法吗(该方法使用泛型类型参数)吗?考虑以下示例:

  public class MyClass {
public< K> K doSomething(K k){
return k;
}
}

public class MyGenericClass< T> {
public< K> K doSomething(K k){
return k;
}

public< K>列表与LT; K> makeSingletonList(K k){
return Collections.singletonList(k);


code


$ b

正如你所期望的使用泛型方法,我可以使用任何对象对 MyClass 实例调用 doSomething(K):

  MyClass clazz = new MyClass(); 
String string = clazz.doSomething(String);
Integer integer = clazz.doSomething(1);

但是,如果我尝试使用 MyGenericClass 指定泛型类型,
我调用 doSomething(K)返回一个 Object ,无论 K MyGenericClass untyped = new MyGenericClass();
//这不能编译 - 不兼容的类型,必需:字符串,找到:对象
String string = untyped.doSomething(String);

奇怪的是,如果返回类型是泛型类, 列表< K> (实际上,这可以解释 - 见下面的答案):

  MyGenericClass untyped = new MyGenericClass(); 
列表< String> list = untyped.makeSingletonList(String); //编译

另外,如果泛型类是键入的,即使只使用通配符:

  MyGenericClass<?> wildcard = new MyGenericClass(); 
String string = wildcard.doSomething(String); //这个编译



08-05 09:15