如何制作一个用两种泛型类型实现一个接口的 Java 类? [英] How to make a Java class that implements one interface with two generic types?
本文介绍了如何制作一个用两种泛型类型实现一个接口的 Java 类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个通用接口
public interface Consumer<E> {
public void consume(E e);
}
我有一个使用两种类型的对象的类,所以我想做一些类似的事情:
I have a class that consumes two types of objects, so I would like to do something like:
public class TwoTypesConsumer implements Consumer<Tomato>, Consumer<Apple>
{
public void consume(Tomato t) { ..... }
public void consume(Apple a) { ...... }
}
显然我做不到.
我当然可以自己实现调度,例如
I can of course implement the dispatch myself, e.g.
public class TwoTypesConsumer implements Consumer<Object> {
public void consume(Object o) {
if (o instanceof Tomato) { ..... }
else if (o instanceof Apple) { ..... }
else { throw new IllegalArgumentException(...) }
}
}
但我正在寻找泛型提供的编译时类型检查和调度解决方案.
But I am looking for the compile-time type-checking and dispatching solution that generics provide.
我能想到的最好的解决方案是定义单独的接口,例如
The best solution I can think of is to define separate interfaces, e.g.
public interface AppleConsumer {
public void consume(Apple a);
}
在功能上,我认为这个解决方案还可以.它只是冗长而丑陋.
Functionally, this solution is OK, I think. It's just verbose and ugly.
有什么想法吗?
推荐答案
考虑封装:
public class TwoTypesConsumer {
private TomatoConsumer tomatoConsumer = new TomatoConsumer();
private AppleConsumer appleConsumer = new AppleConsumer();
public void consume(Tomato t) {
tomatoConsumer.consume(t);
}
public void consume(Apple a) {
appleConsumer.consume(a);
}
public static class TomatoConsumer implements Consumer<Tomato> {
public void consume(Tomato t) { ..... }
}
public static class AppleConsumer implements Consumer<Apple> {
public void consume(Apple a) { ..... }
}
}
如果创建这些静态内部类让你感到困扰,你可以使用匿名类:
If creating these static inner classes bothers you, you can use anonymous classes:
public class TwoTypesConsumer {
private Consumer<Tomato> tomatoConsumer = new Consumer<Tomato>() {
public void consume(Tomato t) {
}
};
private Consumer<Apple> appleConsumer = new Consumer<Apple>() {
public void consume(Apple a) {
}
};
public void consume(Tomato t) {
tomatoConsumer.consume(t);
}
public void consume(Apple a) {
appleConsumer.consume(a);
}
}
这篇关于如何制作一个用两种泛型类型实现一个接口的 Java 类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文