私は列挙型をとり、何らかの方法でそれを使用するメソッドを持っています。問題は、私は多くの異なる列挙型を持ち、受け入れられる方法は列挙型をメソッドに渡すことではないということです。異なる列挙型をメソッドに渡す方法は?
答えて
私は別のものを意味する一連の異なる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. マッピング異なる列挙型を一緒
- 2. 型セーフなCOM列挙型を実装する方法は?
- 3. 異なる単位のDelphi列挙型
- 4. Swift - 同じ変数の異なる列挙型をクラスに渡す
- 5. 一般的な列挙型メソッドを作成するには?
- 6. Java:メソッドに列挙を渡す
- 7. Typescript列挙型をパラメータとして渡す方法
- 8. MySQLデータベースから列挙型のドロップダウンリストを列挙する方法
- 9. 列挙型拡張メソッド
- 10. 列挙型基になる型は
- 11. 列挙型解析解析メソッドの開発方法は?
- 12. 列挙型を反復して列挙型インスタンスを設定する方法
- 13. 列挙型を文字配列にマップする方法は?
- 14. 異なる戻り値の型を持つ列挙型Func
- 15. DBの列挙型または列挙型の列挙型
- 16. TypeScriptでランダムな列挙型を取得する方法は?
- 17. メソッドにvar型を渡す方法C#
- 18. 単純型の配列をIn-Ruleメソッドに渡す方法
- 19. 型を非直列化の汎用メソッドに渡す方法
- 20. Swiftのプライベート列挙型の等価メソッドの作成方法
- 21. ダーツの列挙型にメソッドまたは値を追加する
- 22. voidメソッドで列挙型を変更するには? <Java>
- 23. 渡す列挙型の引数
- 24. rowmapperでresultsetを列挙型にキャストする方法は?
- 25. Eclipseで列挙型に定数をリファクタリングする方法は?
- 26. スイッチコントロールに列挙型をバインドする方法は? Xamarin
- 27. PartialEqを列挙型に実装する方法は?
- 28. WPのlistpickerに列挙型をバインドする方法は?
- 29. 引用符:: ToTokensを列挙型に実装する方法は?
- 30. 列挙型オーバーヘッドなしの文字列リテラル型を取得する方法
Intersting、渡された値の使用方法の小さなコードサンプルを投稿できますか? – OscarRyz
マーカーインターフェイスである必要があります。インタフェースには、使用に役立つメソッドを含めることができます。 –
余分な型の安全について: 'public&SpecialEnumType> void doSomething(E e)' –
finnw