Enumsでジェネリックを使用することはできませんが、の戻り値の型がのenumのメソッドを実装する方法を探しています。私が列挙以下た例えばJava:列挙型で異なる戻り値の型を持つメソッドを取得する方法はありますか?
この場合TEST_INTEGER
とTEST_STRING
で
enum TestEnum {
TEST_INTEGER() {
@Override
public Integer getValue() {
return 123;
}
},
TEST_STRING() {
@Override
public String getValue() {
return "Test";
}
};
public abstract Object getValue();
}
はTestEnum
の実装です。 getValue()
が呼び出されたときにgetValue()
メソッドが返品タイプObject
で、Integer
またはString
でない理由がわかりました。つまり、どちらの場合も、私は関連Classtypeにキャストする必要があります。
異なるClasstypeをdiretlyで取得する方法はありますか?あなたがオブジェクトではなく<T> T
を使用する場合は
このアプローチの致命的な欠陥は、クライアントが、異なる定数のそれぞれに対して期待する異なる戻りタイプ、つまりDemeterの法則に違反しているかどうかを知ることです。 enum定数が変数のロジックに渡された場合、クライアントは戻り値の型を知りません。これは欠陥のある解決策です。OPに欠陥のある問題がある可能性があります。彼らはより良い型分析が必要です。 Javaは非共変リターン型をサポートしていません。 –
@LewBloch私はこれが最適ではないことを知っています。特に、複数の人がコードを使って作業しているときには最適です。 (私は他の人が使っているAPIの中でこのようなことを使うことはありません)あなたが小さなプロジェクトを持っていて、別のタイプ(つまりホスト/ポートなど)を素早く、汚れていたい場所に置いたら、それは "大丈夫"です。静的なクラスの中に静的な型を持たせる方が良いです(オートコンプリートに関しても同様に動作します)。しかし、リフレクションを使用する必要がある静的型の場合は、プログラムで反復することができます。 – dognose