java如何根据泛型类型调用方法?
让我们输入以下代码:
public abstract class MySuperClass {
public abstract void update();
/* ... */
}
public class A extends MySuperClass {
@Override
public void update() { /* ... */ }
/* ... */
}
public class B extends MySuperClass {
@Override
public void update() { /* ... */ }
/* ... */
}
public class Ticket<T extends MySuperClass> {
private Class<T> c;
public Ticket(Class<T> c){ this.c = c; }
public Class<T> getClass() { return this.c; }
public void update() { /* HOW TO DO! */ }
/* ... */
}
public class Main {
public static void main(String[] args) {
Ticket<A> myTicket1 = new Ticket<A>(A.class);
Ticket<B> myTicket2 = new Ticket<B>(B.class);
myTicket1.update();
myTicket2.update();
}
}
如何根据他的类型(A
、B
)等升级票据
# 1 楼答案
我已经调整了你的例子,使它更有意义。。。并实现了
update
update
方法调用t.update()
,它将以多态方式分派给t
引用的实际对象的update
方法。注意,我添加了代码来创建和存储Class<T>
的实例更新-我已将异常添加到
Ticket
构造函数中。这是使用反射创建实例所付出的代价的一部分。。。而不是使用new
创建它们并将它们作为参数传递# 2 楼答案
update()是一个实例方法,因此需要一个实例来调用它。这可以通过以下方式实现:
由于polymorhism,它将从A或B调用正确的方法。 但要以更面向对象的方式解决这个问题,您应该将一个实例传递给票证构造函数,然后只调用update()
# 3 楼答案
为什么
Ticket
知道更新实际上意味着什么。它只需要将调用转发到MySuperClass
的实例。泛型类的全部要点是泛型类将处理任何对象(或对象子集),而不必确切知道它是什么类型