May 26 2009
∞
Genericsではまった - 矢野勉のはてな日記
複合的な総称型にキャストするにはどうしたらいいんだろう?というのでちょっとはまったのでメモ。
複数のインターフェイスを併せ持つ物(たとえばComparableなObserver、とか)のみ扱いたいよー、という時には、Genericsを使ってとかやれば良いんですが、この型へのキャストが必要になった場合どうすれば良いか、という話。
↓当然ながらこれはできない。
public static void main(String[] args) { create((MyClass & Loggable<MyClass>)target); }結局方法としては、次のように、キャストを実際に行うメソッドの宣言に型宣言を追加すればよかった。今から使う型TはMyClass & Loggable
だから、と宣言する。 public static <T extends MyClass & Loggable<MyClass>> void main(String[] args) { create((T)target); }