java - 泛型方法 - 传递对象并调用其方法

标签 java generics

我试图了解泛型是如何工作的,并编写了一个方法来测试它。

我创建了对象 - Drink 及其子对象 Coffee...并定义了一个通用方法 go1() 来调用这两个对象的 sip() 方法...

我在 Eclipse 中运行并收到错误 - 指出方法 sip() 对于类型 V 未定义。

有人可以解释一下这是如何处理的吗?

class Drink{
    public void sip(){
        System.out.println("Im Drink method");
    }
}

class Coffee extends Drink{
    public void sip(){
        System.out.println("Im Coffee method");
    }

}

public class test{

    public static <V> V go1(V o){
        o.sip();

    }

public static <V> void go(V v){
        System.out.println(v.hashCode());
    }

    public static void main(String[] args) {
        Drink s1 = new Drink();
        go1(s1);

            int i = 10;
        String j ="test";
        go(i);
        go(j);

    }
}

最佳答案

只需为类型参数添加界限:

public static <V extends Drink> void go1(V o){
    o.sip();
}

通过类型参数绑定(bind),您可以访问绑定(bind)的非静态方法 - Drink在本例中,使用该类型参数的引用。

编辑后:

通过StringInteger根据您的方法,您可以想到哪个共同上限适合两者。 String 的公共(public)父类(super class)型和Integer是:

因此,您可以拥有三种边界:

  • <V extends Object>
  • <V extends Serializable>
  • <V extends Comparable<V>>

所以你只需修改你的 go()方法如下:

public static <V extends Object> void go(V v){
    System.out.println(v.hashCode());
}

引用文献:

关于java - 泛型方法 - 传递对象并调用其方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19139660/

相关文章:

java - oracle.jbo.NoObjException : JBO-25003: Object <ObjectName> of type DataControl is not found

c# - 处理泛型时编译器的无用期望?

java - 视力 jSTL c :set analog

java - OpenGL slick-util 缺少类 : UnicodeFont not included in . jar

java - 尝试将字符串数组的索引值与 int 值进行比较

java - 脚本语言 - 在服务器上执行

Java 8 : create new instance of class with generics using reflection

Java 泛型新原始类型与泛型类型

flutter - 抽象 - 如何为 Dart/Flutter 中的多种类型创建通用静态方法?

c# - 通用列表性能优化