将类的类型告知外界是否被认为是一种良好的实践?

4

我有以下接口:

public enum AggregatorType{
    DATA_BASE,
    GLOBAL_CACHE,
    //etc
}

public interface DataAggregator<T>{

     public AggregatorType getType();

     public Collection<T> getData();

}

我的问题是关于将不同类型放在同一个枚举中。对我来说,至少它看起来不是一件好事(因为将两个不同的类型放在同一个位置)。但我无法看到它可能导致的潜在问题。你能帮助我理解吗?


这种方法相比于instanceof有什么好处? - Tobia Tesan
@TobiaTesan 不,instanceof不是解决方案,因为我不知道聚合器的实际类型。 - St.Antario
2
我有点困惑。您能否描述一下您的用例,最好附带一个示例?我强烈怀疑您并不需要它。此外,这个可能会有所帮助 :) - Tobia Tesan
面向对象编程中,为对象定义枚举类型通常不是一个好的设计选择。更好的解决方案是通过继承或者共同的接口来实现。 - Uwe Allner
@TobiaTesan 这只是将不同的聚合器分成不同的组。聚合器返回数据,然后我会找到它们的交集。 - St.Antario
1个回答

3
通常使用枚举类型来显式定义类的类型不是一个好的做法,因为在代码的其他部分中,你可能想要使用控制结构(if-else/switch-case)来区分聚合的方式。
如果我是你,我会在这个接口中放置一个“aggregate”方法,并让多态机制为我完成魔法。DataBaseAggregator和CacheAggregator可以作为这个接口的实现,以定义这些数据聚合的不同行为。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接