使用类型变量泛型的调用方法

时间:2017-06-30 06:51:31

标签: java generics

我有一个场景,我想创建一个名为D的支持类,其中包含一个通用方法。我已经设置了类型变量的上限。

class A{
    void show(){
        System.out.println("Hello A");
    }
}

class B extends A{
    void msg(){
        System.out.println("Hello B");
    }
}

class C extends A{
    void msg(){
        System.out.println("Hello C");
    }
}

class D{
    <T extends A> void display(T ob){
        ob.msg(); //here i want to do some tricks
    }
}

首先,我想分享我的目标。这里B和C类的msg()函数有不同的实现。我想创建一个名为D的支持类,它有一个显示方法,使用display方法我想调用依赖于实例化的B或C类的msg()函数。你能告诉我怎样才能实现它?

3 个答案:

答案 0 :(得分:2)

您需要在类msg()中使用方法A,否则类display()中的D方法不知道此方法是否存在于该对象中你要传递给它。 (如果有人创建的课程E延伸A但没有msg()方法,并且您将E传递给D.display()?)。< / p>

如果您不想在课程msg()中实施A方法,那么您可以将其设为abstract(并且您还必须制作课程{{1} }})。

abstract

答案 1 :(得分:0)

更像是一种架构风格,我会使用一个接口,所以你的泛型方法约束到msg其中If是抽象方法的接口interface If { void msg(); } class A { void show() { System.out.println("Hello A"); } } class B extends A implements If { @Override public void msg() { System.out.println("Hello B"); } } class C extends A implements If { @Override public void msg() { System.out.println("Hello C"); } } class D { <T extends If> void display(T ob) { ob.msg(); // here i want to do some tricks } }

 diff -r -q d1/ d2/ >/dev/null 2>&1

答案 2 :(得分:0)

你不需要泛型,在Java中有一个叫做动态绑定的基本概念。

data-id

这里为方法提供的适当实例将确定在运行时调用哪个类方法。