使用类型变量泛型的java调用方法
我有一个场景,我想创建一个名为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方法,使用display方法,我想根据实例化调用B或C类的msg()函数。你能告诉我怎样才能做到吗
# 1 楼答案
您需要在类
A
中有方法msg()
,否则类D
中的display()
方法不知道您传递给它的对象中是否存在此方法。(如果有人创建了一个扩展了A
但没有msg()
方法的E
类,而您将E
传递给D.display()
,该怎么办?)如果您不想在类
A
中实现msg()
方法,那么您可以将其设为abstract
(并且您还必须将类abstract
)# 2 楼答案
这不需要泛型,Java中有一个叫做动态绑定的基本概念
在这里,提供给方法的适当实例将决定在运行时调用哪个类方法