简短版:
如何正确使用语法使类继承其泛型参数:
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中实现呢?如果不可能,有什么好的方式可以实现呢?