gpt4 book ai didi

java - ArrayList中不同类型(相同接口(interface))的计数

转载 作者:行者123 更新时间:2023-12-01 04:32:45 25 4
gpt4 key购买 nike

我有两个类实现像这样的相同接口(interface)..

// Interface
Interface ISomething { ... }

// Class A
class A implements ISomething { ... }

// Class B
class B implements ISomething { ... }

然后在 ArrayList<ISomething>我有很多 A 类和 B 类的实例。

有没有一种方法可以在不使用 instanceof 的情况下分别计算 A 类和 B 类的出现次数。我绑定(bind)了很多方法(例如在 A 类和 B 类中创建新方法,让它们决定是否应该增加传递给它们的整数数组中保存的计数变量),但它们似乎不是好的设计。

PS。抱歉我的英语不好,而且缺乏 Java 和 OO 设计方面的技能。如果这是一个不好的问题,请告诉我。

更新
我试过visitor_pattern它起作用了(它比我之前使用的方法更易于维护)。
代码是这样的..

// Interfaces
Interface ISomething { public void accept(ISomethingVisitor visitor); }
Interface ISomethingVisitor {
public void visit(A a);
public void visit(B b);
}

// Classes
class A implements ISomething {
@Override
public void accept(ISomethingVisitor visitor) { visitor.visit(this); }
}
class B implements ISomething {
@Override
public void accept(ISomethingVisitor visitor) { visitor.visit(this); }
}
class SomethingCountVisitor implements ISomethingVisitor {
private int aCount;
private int bCount;

@Override
public void visit(A a) { aCount++; }
@Override
public void visit(B b) { bCount++; }
//getters for aCount, bCount
}

// Example usage
// Assuming items have many A and B instances.
ArrayList<ISomething> items = new ArrayList<ISomething>();
...
SomethingCountVisitor scVisitor = new SomethingCountVisitor();
for (ISomething item in items)
item.accept(scVisitor);

最佳答案

如果你不想使用instanceof,你只能使用A.class.isInstance(Object)

关于java - ArrayList中不同类型(相同接口(interface))的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17784298/

25 4 0