今日読んだところ
160 ページ〜 174 ページ
enum は継承できない
混乱するので、あまり出来ないほうがいいけどね!
オペコードのようなものは
インタフェースを切って enum が継承してやれば拡張可能に出来るよ!
たとえば、 jython のバイトコードは
package org.python.bytecode; public interface Instruction { void accept(BytecodeVisitor visitor); }
って感じのインタフェースを以下の enum で実装してる
package org.python.bytecode; public enum BytecodeInstruction implements Instruction, RawInstruction { /** Marks the end of the byte code segment. */ STOP_CODE(0, false, null, null) { /* ... */ @Override public void accept(BytecodeVisitor visitor) { visitor.visitStop(); } }, /** * Remove the top stack element. * * Stack: element -> - */ POP_TOP(1, false, null, null) { @Override public void accept(BytecodeVisitor visitor) { visitor.visitPop(); } }, /* ... */ }
なので、自分でオリジナルなバイトコードも追加できるということ
Class#getEnumConstants
T.values と同じだけどインスタンスメソッドなので、型消去後も使える。
命名パターンは、ダメ
アノテーションを使おう、命名パターンだと書き間違えとかあるしね。
マーカーインタフェースは便利
タイプアノテーションも便利だけど、場合によってはマーカーインタフェースもまだ使う
マーカーインタフェースが便利なのは以下のようなとき
まとめ
なんか、あっさり目な内容でした。
あ、アノテーション愛が足りない><