java接⼝参数类型为枚举_java–如何将不同的枚举类型传递给
⽅法?
我假设你的意思是你有⼀堆不同的枚举类意味着分开的东西,并且你想将它们传递给⼀个⽅法.
public interface SpecialEnumType {
}
然后:
public enum MySpecialEnumType implements SpecialEnumType {
...
}
public enum AnotherSpecialEnumType implements SpecialEnumType {
...
}
现在您的⽅法将接受SpecialEnumType类型的参数:
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 {
...
}
enum类型如何使用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) {
...
}
}
}
现在在我的实际实现中,我在标记界⾯中有⼀些⽅法.所以它甚⾄不必是标记接⼝;它可以包含⽅法.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论