在我的代码中,Generic class Public将在check()方法中接收一个泛型对象。这些通用对象可能来自JuniorInstructor类或SeniorInstructor类。我想访问JuniorInstructor类或SeniorInstructor类的属性。我尝试了以下实现,它的工作原理。但是,有没有更好的方法呢?
export interface Product {
filters: Filters;
...
}
export interface Filters {
ingredients: Ingredient[];
...
}
export interface Ingredient {
id: number;
...
}
答案 0 :(得分:1)
您可以进一步限定T
:
class Public<T extends Instructor>
只需确保您需要访问的所有方法都在Instructor
上定义。然后,您就可以直接在Public
中调用它们。
[编辑] @JBNizet在评论中有一个很好的观点,Public
如果Instructor
及其子类是它需要处理的全部内容,那么ENABLE_PREPROCESSING=YES
真的不需要是泛型。
答案 1 :(得分:0)
您可以声明Public类,如
class Public<T extends Instructor> {
...
}
以这种方式,只要您需要访问“讲师”属性,就可以避免检查实例类型。
希望这个帮助
答案 2 :(得分:0)
我认为可能想使用多态而不是泛型。
创建2个check
方法的重载版本:
JuniorInstructor
SeniorInstructor
通过这种方式,无需使用instanceOf
或将对象投射到给定类型。
class Public {
JuniorInstructor j1;
SeniorInstructor s1;
public void check(SeniorInstructor object) {
s1 = object;
System.out.println("name: " + s1.getName() + "\tid: " + s1.getId());
}
public void check(JuniorInstructor object) {
j1 = object;
System.out.println("name: " + j1.getName() + "\tid: " + j1.getId());
}
}
答案 3 :(得分:0)
如沃德所说,
泛型的一个好处是你可以编写通用代码,而无需使用instanceof和cast等......
您可以修改Public类,如下所示:
class Public<T extends Instructor> {
T instructor;
public void check(T object) {
this.instructor = object;
System.out.println("name: " + this.instructor.name + "\tid: " + this.instructor.id);
}
}
答案 4 :(得分:0)
public class Instructor {
private String id;
private String name;
public Instructor(String id, String name) {
this.id= id; this.name= name;
}
//getters and setters
}
然后是公开课:
class Public<T extends Instructor> {
T object;
public void check(T object) {
System.out.println("name: " + object.getName() + "\tid: " + object.getId());
}
}
但是,如果您的类只有一个方法使用此T作为参数,则可以将其修改为:
class Public {
public <T extends Instructor> void check(T object) {
System.out.println("name: " + object.getName() + "\tid: " + object.getId());
}
}
或者由于泛型的使用在这里不明确,我们可以简单地使用:
class Public {
public void check(Instructor object) {
System.out.println("name: " + object.getName() + "\tid: " + object.getId());
}
}
主要是:
public static void main(String[] args) {
Public obj= new Public();
obj.check(new JuniorInstructor("1","Payal"));
}