如何通过对象传递访问另一个泛型类中的类属性?

时间:2018-01-02 15:50:49

标签: java oop generics inheritance

在我的代码中,Generic class Public将在check()方法中接收一个泛型对象。这些通用对象可能来自JuniorInstructor类或SeniorInstructor类。我想访问JuniorInstructor类或SeniorInstructor类的属性。我尝试了以下实现,它的工作原理。但是,有没有更好的方法呢?

export interface Product {
  filters: Filters;
  ...
}
export interface Filters {
  ingredients: Ingredient[];
  ...
}
export interface Ingredient {
  id: number;
  ...
}

5 个答案:

答案 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"));
}