【发布时间】:2010-11-20 20:14:25
【问题描述】:
我有一个通用接口
public interface Consumer<E> {
public void consume(E e);
}
我有一个使用两种类型对象的类,所以我想做类似的事情:
public class TwoTypesConsumer implements Consumer<Tomato>, Consumer<Apple>
{
public void consume(Tomato t) { ..... }
public void consume(Apple a) { ...... }
}
显然我做不到。
我当然可以自己实现调度,例如
public class TwoTypesConsumer implements Consumer<Object> {
public void consume(Object o) {
if (o instanceof Tomato) { ..... }
else if (o instanceof Apple) { ..... }
else { throw new IllegalArgumentException(...) }
}
}
但我正在寻找泛型提供的编译时类型检查和调度解决方案。
我能想到的最佳解决方案是定义单独的接口,例如
public interface AppleConsumer {
public void consume(Apple a);
}
我认为,从功能上讲,这个解决方案还可以。它只是冗长而丑陋。
有什么想法吗?
【问题讨论】:
-
为什么需要两个相同基类型的泛型接口?
-
由于类型擦除,您不能这样做。保留两个实现消费者的不同类。制作更多小类,但保持代码通用(不要使用公认的答案,它会破坏整个概念......你不能将 TwoTypesConsumer 视为消费者,这是不好的)。
-
检查此功能样式 impl - stackoverflow.com/a/60466413/4121845
标签: java generics interface multiple-inheritance