从泛型方法调用重载方法

时间:2010-03-28 04:10:10

标签: java generics

如何创建可以调用重载方法的泛型方法? 我试过但它给出了编译错误。

Test.java:19:不兼容的类型 发现:java.lang.Object 要求:T T newt = getCloneOf(t);                                                    ^

import java.util.*;

public class Test {


 private Object getCloneOf(Object s) {
  return new Object();
 }

 private String getCloneOf(String s) {
  return new String(s);
 }

 private <T> Set<T> getCloneOf(Set<T> set){
  Set<T> newSet = null;
  if( null != set) {
   newSet = new HashSet<T>();
   for (T t : set) {
    T newt = getCloneOf(t);
    newSet.add(newt);
   }
  }
 }

}    

1 个答案:

答案 0 :(得分:3)

T变量只能设置为等于类T的对象,或其中一个子类。在您的情况下,getCloneOf()返回的是Object,它不会是T的子类,甚至不是T的子类。

例如:

class Parent {
    public void doStuff(){
    }
}

class Child extends Parent {
    public void doDifferentStuff(){
    }
}

这没关系:

Parent p = new Child();  

因为即使p是Child类对象,这也会起作用,因为它从Parent继承了该函数:

p.doStuff(); 

这不行:

Child c = new Parent();

因为这在理论上应该起作用,因为变量是Child类型,但是允许前一行会爆炸,因为Parent对象没有具有该名称的函数。

c.doDifferentStuff();