【发布时间】:2016-11-06 15:46:10
【问题描述】:
短版:
使类扩展其泛型参数的正确语法是什么:
class A<T> extends T {} // doesn't compile
长版:
我有一个基础抽象类(以下代码已被缩短只是为了这篇文章的目的)
abstract class D {
abstract void f();
abstract void g();
}
然后,每个 f() 和每个 g() 都有一组可能的组合。目标是拥有所有可能的组合。
一种解决方案是为每个 f_j() 创建一个扩展 D 并实现 f_j() 的类 Fj,然后为每个 g_i() 创建一个扩展 Fj 并实现 g_i() 的类 GiFj。 例如
abstract class F1 extends D {
@Override
void f() { /* F1 Work */ }
}
abstract class F2 extends D {
@Override
void f() { /* F2 Work */ }
}
class G1F1 extends F1 {
@Override
void g() { /* G1 Work */ }
}
class G1F2 extends F2 {
@Override
void g() { /* G1 Work : Duplicated Code */ }
}
问题是 Gi 的代码会被重复很多次。
我想要实现的解决方案是将所有 GFi 重新组合到泛型类中
class G1<F extends D> extends F {
@Override
void g() { /* G1 work */ }
}
那么如何在java中做到这一点,或者如果不可能的话,有什么好方法来做到这一点
【问题讨论】:
-
不幸的是,您似乎想要类的多重继承,这在 Java 中不受支持。看看使用mixin 策略。