gpt4 book ai didi

java - 如何在没有实现的情况下将枚举公开给公共(public) API?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:49:29 26 4
gpt4 key购买 nike

我有一个类,它有一个类型为枚举的属性。示例:

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 是库的一部分,我想公开它的功能,所以我创建了一个接口(interface),它将成为公共(public) API 的一部分,并拥有类 Car 实现它:

interface ICar {
CarType getType();
}

class Car implements ICar {
private CarType type;
@Override public CarType getType() { return type; }
}

这种方法的问题在于,这需要发布整个 CarType 枚举。 CarType 枚举可能包含我不想公开/发布的其他属性和方法(本例中为 country)。

如果我想隐藏 CarType 的实现,但我仍然想以某种方式公开可能的值(声明的枚举值),以便 API 用户可以在switchif 语句如下:

ICar car = ...; // Get an instance somehow.
if (car.getType() == CarType.TOYOTA) System.out.println("It's Toyota.");

将额外的属性和方法设为protectedprivate 并不是一个好的解决方案,因为这样库的其他部分也将无法引用它们。

如果我想继续使用枚举,有什么好的替代方法可以解决这个问题吗?

最佳答案

虽然迟到了想补充一下我的想法-

枚举还可以实现一个接口(interface),您可以在其中仅公开所需的详细信息:

 public enum CarType implements ICarType {
...
public String getTypeName(){
return name();
}
}

public interface ICarType {
public String getTypeName();
}

所以你打算在if()/switch中使用它

  ICarType carType; //Not referencing the enum

if("TOYOTA".equalsIgnoreCase(carType.getTypeName())){
print("Toyota....");
}

关于java - 如何在没有实现的情况下将枚举公开给公共(public) API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21328329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com