java - 只需要在列表中添加父类对象,限制子类对象

标签 java

我需要声明一个只接受父类对象而不允许子类对象的列表。

parent class:

public class ParentClass {

  private String parentAttr;

  public String getParentAttr() {
    return parentAttr;
  }

  public void setParentAttr(String parentAttr) {
    this.parentAttr = parentAttr;
  }

}


Sub class:

public class SubClass1 extends ParentClass {

  private String attr1;

  public String getAttr1() {
    return attr1;
  }

  public void setAttr1(String attr1) {
    this.attr1 = attr1;
  }

}

Main class:

public class MainClass {

  public static void main(String[] args) {
    ParentClass parentClass=new ParentClass();

    SubClass1 subClass1 = new SubClass1();

    List<ParentClass> list=new ArrayList<ParentClass>(); // modify this declaration such that it should accept only the parent class objs

    list.add(parentClass);

    list.add(subClass1); // this should not happen. only parent class objects should be added in the list

  }

}

我也尝试过使用泛型。但它不工作。有什么方法可以在 Java 泛型中实现这一点?

最佳答案

您可以实现 List接口(interface)并为 List.add(int index, E element) 提供您自己的实现方法并检查元素是否是父类的实例,而不是您实现中的子类的实例。

您还可以扩展 ArrayList类并覆盖所有将元素添加到 ArrayList 的方法,并检查元素是否是父类的实例而不是您实现中的子类的实例,并调用 Super 方法来处理添加元素的过程。

关于java - 只需要在列表中添加父类对象,限制子类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31781555/

相关文章:

java - 如何统计HQL中的子查询?

java - "Attempting to use an incompatible return type"接口(interface)继承

java - 我将如何创建一个旋转矩阵,将 X 旋转 a,Y 旋转 b,Z 旋转 c?

java - EJB 中的事务管理

java - 插入排序比 shell 排序快得多

java - Android Studio问题|等待进程出现在设备上超时

java - 有什么方法可以重用 Stream 吗?

java - JButton 在我的 java 代码中不起作用

java - 编辑文本中不显示字符串

java - 当只有一个 fragment 可见时, fragment 之间进行通信