私は列挙型をとり、何らかの方法でそれを使用するメソッドを持っています。問題は、私は多くの異なる列挙型を持ち、受け入れられる方法は列挙型をメソッドに渡すことではないということです。異なる列挙型をメソッドに渡す方法は?
答えて
私は別のものを意味する一連の異なるenumクラスがあり、それらを1つのメソッドに渡したいと思っています。
public interface SpecialEnumType {
}
その後:
public enum MySpecialEnumType implements SpecialEnumType {
...
}
public enum AnotherSpecialEnumType implements SpecialEnumType {
...
}
を今すぐあなたの方法は、タイプSpecialEnumType
のパラメータ受け入れる:marker interfaceを使用する、ことを行うには
ことをやった
public doSomething(SpecialEnumType specialEnumType) {
...
}
を、あなたはできる:
obj.doSomething(MySpecialEnumType.SomeThing);
obj.doSomething(AnotherSpecialEnumType.SomethingElse);
一般に、メソッド引数のパラメータ型としてenumを使用するのは問題ありません。
UPDATE
サードパーティのAPIのと統合しながら、私は、このパターンを使用しました。たとえば、少し前に、私は別の配送業者と統合しなければなりませんでした。これを行うために、開発者が配送情報(アドレス、パッケージ、ウェイト、パッキングオプションなど)を送ることを可能にする一般的なインターフェイスを提供しました。新しい提供物との統合を実装したい場合は、インターフェースを実装するだけでした。
現在、各配送業者には独自のオプションがあります。マーカーインターフェイスを使用する前に、(すべての異なる配送業者の)すべてのオプションを含む単一の列挙型がありました。明らかにこれを維持することは困難です。しかし、インタフェースがメソッドの引数に特定の型の列挙型を指定しているため、列挙型を別のクラスに分割できませんでした。
マーカーインターフェイスを使用して、この問題を回避できました。 ShippingProviderOption
というインターフェースを作成しました。次に、各プロバイダについて、インタフェースを拡張して、そのプロバイダの特定のオプションとともに列挙型を作成しました。この方法で私はオプションを分けることができましたが、それでも共通のインターフェースを提示します。
コードに関する限り(大幅に簡素化し、実証のため、やや不自然な目的は):
public interface ShippingProviderOption {
}
public enum UPSOption implements ShippingProviderOption {
...
}
public enum FedexOption implements ShippingProviderOption {
...
}
public interface ShippingProvider {
public ShippingResponse ship(ShippingProviderOption option);
}
public class UPSProvider implements ShippingProvider {
@Override
public ShippingResponse ship(ShippingProviderOption option) {
if(option == UPSOption.PackageType) {
...
}
}
}
public class FedexProvider implements ShippingProvider {
@Override
public ShippingResponse ship(ShippingProviderOption option) {
if(option == FedexOption.PickupType) {
...
}
}
}
は今私の実際の実装では、私はマーカーインタフェースでいくつかのメソッドを持っています。したがって、実際にはマーカインタフェースである必要はありません。メソッドを含めることができます。
- 1. 型セーフなCOM列挙型を実装する方法は?
- 2. Java:メソッドに列挙を渡す
- 3. 列挙型拡張メソッド
- 4. 列挙型解析解析メソッドの開発方法は?
- 5. 異なる戻り値の型を持つ列挙型Func
- 6. DBの列挙型または列挙型の列挙型
- 7. 渡す列挙型の引数
- 8. コレクションを列挙する方法が異なる
- 9. rowmapperでresultsetを列挙型にキャストする方法は?
- 10. WPのlistpickerに列挙型をバインドする方法は?
- 11. Eclipseで列挙型に定数をリファクタリングする方法は?
- 12. PartialEqを列挙型に実装する方法は?
- 13. AutoMapper列挙型に基づいた異なるタイプへのマップ?
- 14. 列挙型の値の型を保持する方法
- 15. 列挙型は
- 16. は、列挙型
- 17. は、列挙型
- 18. 列挙型は
- 19. 列挙型は
- 20. Retrofit経由で@Queryのカスタム列挙型を渡すには?
- 21. 異なる値を持つJavaの同じ列挙型
- 22. はどのように列挙型に列挙型
- 23. 列挙型に
- 24. 整数型の列挙型による単純な反復?私は、次の列挙型を有する
- 25. 列挙型の中の列挙型
- 26. 列挙型内の列挙型
- 27. 列挙型の列挙型の作成
- 28. 列挙型の間の共有メソッド
- 29. Scala列挙型のtoStringメソッドのオーバーライド
- 30. Java:列挙型の汎用メソッド
Intersting、渡された値の使用方法の小さなコードサンプルを投稿できますか? – OscarRyz
マーカーインターフェイスである必要があります。インタフェースには、使用に役立つメソッドを含めることができます。 –
余分な型の安全について: 'public&SpecialEnumType> void doSomething(E e)' –
finnw