我有一个类,其类的属性为Enum。例:
enum CarType {
TOYOTA("Japan"),
AUDI("Germany"),
BMW("Germany");
public final String country;
private CarType(String country) { this.country = country; }
}
class Car {
private CarType type;
public CarType getType() { return type; }
}
该类Car
是库的一部分,我想公开其功能,因此我创建了一个接口,该接口将成为公共API的一部分,并让该类Car
实现它:
interface ICar {
CarType getType();
}
class Car implements ICar {
private CarType type;
@Override public CarType getType() { return type; }
}
这种方法的问题在于,这将需要CarType
发布整个枚举。该CarType
枚举可能包含我不希望暴露/发布(附加属性和方法,country
在这个例子中)。
如果我想隐藏的实现,CarType
但仍然想以某种方式公开可能的值(声明的枚举值),该方法可以使API用户可以在switch
andif
语句中引用它们,如下所示:
ICar car = ...; // Get an instance somehow.
if (car.getType() == CarType.TOYOTA) System.out.println("It's Toyota.");
设置其他属性和方法protected
还是private
不是一个好的解决方案,因为那时库的其他部分也将无法引用它们。
如果我想继续使用枚举,是否有解决此问题的好方法?
您可以为公共API提供Enum,并将其转换为另一个Enum以供私人使用。
例如,使用Map,其中键是公共Enum实例,值是私有Enum实例。
问题在于,每次调用API时都必须转换数据。在许多地方可能需要更改。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句