Java Generic类扩展了参数化类型

pas*_*qui 6 java

假设以下现有类:

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

class A1 extends A  { ... };
class A2 extends A  { ... };
...
class A1000 extends A  { ... };
Run Code Online (Sandbox Code Playgroud)

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

class B<T extends A> extends T {
  @Override public void foo () { ... };
}
Run Code Online (Sandbox Code Playgroud)

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

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

class B1 extends A1 { @Override public void foo() { ... }; }; 
class B2 extends A2 { @Override public void foo() { ... }; }; 
....
class B1000 extends A1000 { @Override public void foo() { ... }; };
Run Code Online (Sandbox Code Playgroud)

并允许以下语句:

... 
B<A643> b643 = new B<A643>; 
b643.foo(); 
...
Run Code Online (Sandbox Code Playgroud)

任何提示?

非常感谢.

Ell*_*sch 5

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

class B<T> extends A {
  @Override public void foo () { ... };
}
Run Code Online (Sandbox Code Playgroud)

这是一个B扩展的泛型类型A...... T extends A意味着B需要一种扩展A(不B扩展A)的类型.


pas*_*qui 0

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