繁体   English   中英

Java Generic类扩展了参数化类型

[英]Java Generic class extends parametrized type

假设以下现有类:

class A { 
  public void foo() { ... };
  ...
}

class A1 extends A  { ... };
class A2 extends A  { ... };
...
class A1000 extends A  { ... };

现在,我们需要创建一个覆盖“foo”方法的每个Axx类的变体。 基本想法是:

class B<T extends A> extends T {
  @Override public void foo () { ... };
}

但似乎不可能从一个参数类型中扩展一个类。

目标是不再需要遵循新代码:

class B1 extends A1 { @Override public void foo() { ... }; }; 
class B2 extends A2 { @Override public void foo() { ... }; }; 
....
class B1000 extends A1000 { @Override public void foo() { ... }; };

并允许以下语句:

... 
B<A643> b643 = new B<A643>; 
b643.foo(); 
...

任何提示?

非常感谢。

A不是通用的。 我想你想要的东西,

class B<T> extends A {
  @Override public void foo () { ... };
}

这是一个通用型B延伸A ... T extends A将意味着B需要扩展一个类型A (不B伸出A )。

您可以将继承与委派混合使用。 我认为它很难看,但它应该有用。

class UniversalB extends A{
 A a;
 UniversalB(A a) {
    this.a = a;
 }

 @Override public void foo() { ... };

 // @Override any other method from A you want/need
 // and delegate it to the passed member if necessary

}

UniversalB b = new UniversalB(new A123());
b.foo();
b.anyMethodInA();

最后,使用代理类解决了。 标准的reflection.proxy不适用,但是图书管理员CGLib的代理却没有。 简而言之,使用具有与“B.foo”相同的代码的拦截器。 有关详细信息,请参阅override.proxy无效 感谢Tagir Valeev的帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM