gpt4 book ai didi

java - 覆盖列表和Java实践

转载 作者:搜寻专家 更新时间:2023-10-30 21:21:15 24 4
gpt4 key购买 nike

我有三个类(class)(以后人数可能会增加):

public inteface Base{ }

public class Select implements Base{ }

public class Ast implements Base{ }

public class Gt implements Base{ }

我还需要一个 List

BaseList extends ArrayList<Base>{
public boolean add(Base b){
throw new UnsupportedOperationException("You should use add%ConcereteBaseType% method instead");
}

public boolean add(Select s){ }

public boolean add(Ast a){ }

public boolean add(Gt g){ }
}

我这样做的原因是我不希望任何人通过指向 Base 的指针添加元素。在我的具体情况下,这是不安全的。

但缺点是它只会在运行时被发现。

我还需要遍历列表。

做这样的事情是好的做法吗?

最佳答案

使用 interface很好。 (将 Base 变成一个抽象类不会给你带来任何好处。)

虽然在这里你应该更喜欢组合而不是继承,并实现 Iterable<Base>能够在增强的 for 循环等中使用它。

class BaseList implements Iterable<Base> {
private List<Base> list = new ArrayList<>();

public boolean add(Select s) {
return list.add(s);
}

public boolean add(Ast a) {
return list.add(a);
}

public boolean add(Gt gt) {
return list.add(gt);
}

@Override
public Iterator<Base> iterator() {
return Collections.unmodifiableList(list).iterator();
}
}

然后您可以按如下方式遍历列表:

for (Base b : yourBaseList) {
...
}

关于java - 覆盖列表和Java实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30392599/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com