【发布时间】:2018-01-02 15:50:48
【问题描述】:
在我的代码中,通用类 Public 将在 check() 方法中接收一个通用对象。这些通用对象可能来自 JuniorInstructor 类或 SeniorInstructor 类。我想访问 JuniorInstructor 类或 SeniorInstructor 类的属性。我尝试了以下实现并且它有效。但是,有没有更好的方法来做到这一点?
class JuniorInstructor extends Instructor {
public JuniorInstructor(String id, String name) {
super(id, name);
}
}
class Public<T> {
T object;
JuniorInstructor j1;
SeniorInstructor s1;
public void check(T object) {
this.object = object;
if (object instanceof SeniorInstructor) {
s1 = (SeniorInstructor) object;
System.out.println("name: " + s1.name + "\tid: " + s1.id);
} else {
j1 = (JuniorInstructor) object;
System.out.println("name: " + j1.name + "\tid: " + j1.id);
}
}// check
}
public static void main(String[] args) {
SeniorInstructor s1 = new SeniorInstructor("120", "Ashik");
JuniorInstructor j1 = new JuniorInstructor("677", "Tareq");
Public p = new Public();
p.check(j1);
}
【问题讨论】:
-
我认为您以错误的方式使用泛型。泛型的好处之一是您可以编写 generic 代码,而无需使用
instanceof和强制转换等... -
SeniorInstructor 是否实现 Instructor?如果是这样,T 真的打算完全通用还是应该扩展 Instructor? --> 这可能会帮助你找到答案。
-
你也错过了多态性的全部意义。该类不应该是通用的。它不应该有任何状态。它的方法应该简单地将 Instructor 作为参数:
class Public { public void check(Instructor instructor) { System.out.println("name: " + instructor.getName() + "\tid: " + instructor.getId()); } } -
如果你不推断子类的类型,你就不需要类泛型。使类泛型的意义在于将其与不同的类型一起使用。
-
@Ward 我不知道如何通过泛型实现场景。有人回答,我的问题就解决了
标签: java oop generics inheritance