[英]Java Generics extends
让我们在Java(7)中有两个类:
public class A<T> extends HashMap<T, T>{
...
}
和
public class B<T> extends TreeMap<T, T>{
...
}
是否有可能会扩展这两个类的公共基类?
谢谢。
澄清:我希望这些类共享相同的方法
public T f(T o){
...
}
不,那是不可能的。 Java不支持多重继承,因此每个类只能扩展一个类。 由于您的两个类都已经扩展了一个不同的类,因此您不能创建作为两个类的超类的类。
一个可能的解决方案是使用组合:
public class MyMap<T> extends AbstractMap<T,T> {
private Map<T,T> delegate;
public MyMap(Map<T,T> delegate) {
this.delegate = Objects.requireNonNull(delegate);
}
public Set<Map.Entry<T,T>> entrySet() {
return delegate.entrySet();
}
// Optionally, implement other Map methods by calling the same methods
// on delegate.
public T f(T o) {
// ...
}
}
接着:
public class A<T> extends MyMap<T> {
public A() {
super(new HashMap<>());
}
}
public class B<T> extends MyMap<T> {
public B() {
super(new TreeMap<>());
}
}
或者简单地:
Map<T,T> aMap = new MyMap<>(new SomeOtherMapImplementation(...));
但是显然,现在A
和B
本身分别不是HashMap
和TreeMap
子类,因此如果您需要它,那您就不走运了:-)。
当它们都实现Map<T,T>
您可以执行以下操作:
public class A<T> extends HashMap<T, T> {
}
public class B<T> extends TreeMap<T, T> {
}
List<Map<String,String>> list = Arrays.asList(new A<String>(), new B<String>());
我认为您应该使用所需的方法创建一个Abstract类。 然后,OS扩展了HashMap和TreeMap,请根据需要将此数据结构用作新类的字段。
例如:
public abstract class MyClass<T> {
public T f(T o){
...
}
}
public class A<T> extends MyClass<T> {
private Map<T,T> mapThatINeed;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.