我有一个类,它有一个类型为Enum的属性。例如:如何在没有实现的情况下将枚举暴露给公共API?
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
引用它们和if
陈述这样:
ICar car = ...; // Get an instance somehow.
if (car.getType() == CarType.TOYOTA) System.out.println("It's Toyota.");
制作的附加属性和方法protected
或private
是不是一个很好的解决方案,因为该库的那么其他部分也将不能引用他们。
如果我想继续使用Enums,有没有什么好的替代方案来解决这个问题?
我接受这个答案,因为我提到我希望它以enum的形式发布,并且没有其他方法可以实现它。虽然我走了一条不同的道路,因为我想公开一些附加功能(但不是全部),并且显然不希望复制附加功能。相反,我将枚举公开为接口,其中我想发布的附加功能是接口的一部分,枚举常量也列为接口常量。该解决方案还避免了必须进行转换和实施更改。 – icza