有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从泛型方法调用重载方法

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

测试。java:19:不兼容类型 发现:java。lang.对象 必填项: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) 个答案

  1. # 1 楼答案

    T变量只能设置为类T的对象或其子类之一。在您的例子中,getCloneOf()返回一个Object,它不是T的子类,甚至不一定是T的子类

    例如:

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

    这没关系:

    Parent p = new Child();  
    

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

    p.doStuff(); 
    

    这不好:

    Child c = new Parent();
    

    因为这在理论上是可行的,因为变量的类型是Child,但是如果允许上一行,那么这会因为父对象没有具有该名称的函数而崩溃

    c.doDifferentStuff();