簡體   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