[英]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.