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

icza

我有一个类,其类的属性为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用户可以在switchandif语句中引用它们,如下所示:

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

设置其他属性和方法protected还是private不是一个好的解决方案,因为那时库的其他部分也将无法引用它们。

如果我想继续使用枚举,是否有解决此问题的好方法?

尤里·丘洛夫斯基(Yuriy Chulovskyy)

您可以为公共API提供Enum,并将其转换为另一个Enum以供私人使用。
例如,使用Map,其中键是公共Enum实例,值是私有Enum实例。
问题在于,每次调用API时都必须转换数据。在许多地方可能需要更改。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在没有参数的情况下实现ICommand

来自分类Dev

如何在没有`pow`的情况下实现a^b?

来自分类Dev

如何在没有其他枚举的情况下创建可枚举类?

来自分类Dev

如何在没有ESLint no-unused-var错误的情况下公开全局javascript函数?

来自分类Dev

TutuApp 是如何在没有 Apple 应用商店的情况下公开发布的?

来自分类Dev

如何在没有文档的情况下检查 api?

来自分类Dev

如何在不装箱的情况下将System.Enum与枚举(实现)进行比较?

来自分类Dev

如何在没有公共构造函数的情况下通过Android清单?

来自分类Dev

如何在没有公共“GROUP BY”元素的情况下合并 2 个查询的结果

来自分类Dev

如何在没有web.xml的情况下将Jersey用作JAX-RS实现?

来自分类Dev

如何在没有模式匹配的情况下比较枚举

来自分类Dev

如何在没有变量的情况下从枚举获取值

来自分类Dev

如何在没有缓冲的情况下使用单个枚举检查IEnumerable的多个条件?

来自分类Dev

如何在没有未定义行为的情况下实现快速反sqrt?

来自分类Dev

Javascript-如何在没有shift()的情况下实现队列?

来自分类Dev

Gulp:如何在没有Chrome的livereload插件的情况下实现livereload?

来自分类Dev

如何在没有Akka的情况下实现actor模型?

来自分类Dev

测试驱动开发-如何在没有实现代码的情况下编写测试

来自分类Dev

如何在没有JQuery的情况下正确实现无限滚动的AngularJS表?

来自分类Dev

如何在没有默认构造函数的情况下实现抽象类的Decorator类?

来自分类Dev

如何在现代C ++中没有宏的情况下实现系统特定的功能

来自分类Dev

如何在没有未定义行为的情况下实现快速反sqrt?

来自分类Dev

X11:如何在没有聚焦损失的情况下实现全局热键

来自分类Dev

我如何在没有calc的情况下实现这种等距布局?

来自分类Dev

如何在没有dynamic_cast的情况下对派生类型实现“较少”?

来自分类Dev

如何在没有默认构造函数的情况下实现抽象类的Decorator类?

来自分类Dev

如何在没有CWinApp派生类的情况下实现MFC序列化?

来自分类Dev

如何在没有 CodeRay 的情况下使用 RedCarpet 在我的博客中实现降价?

来自分类Dev

如何在没有@或#等字符触发的情况下实现jquery自动完成

Related 相关文章

  1. 1

    如何在没有参数的情况下实现ICommand

  2. 2

    如何在没有`pow`的情况下实现a^b?

  3. 3

    如何在没有其他枚举的情况下创建可枚举类?

  4. 4

    如何在没有ESLint no-unused-var错误的情况下公开全局javascript函数?

  5. 5

    TutuApp 是如何在没有 Apple 应用商店的情况下公开发布的?

  6. 6

    如何在没有文档的情况下检查 api?

  7. 7

    如何在不装箱的情况下将System.Enum与枚举(实现)进行比较?

  8. 8

    如何在没有公共构造函数的情况下通过Android清单?

  9. 9

    如何在没有公共“GROUP BY”元素的情况下合并 2 个查询的结果

  10. 10

    如何在没有web.xml的情况下将Jersey用作JAX-RS实现?

  11. 11

    如何在没有模式匹配的情况下比较枚举

  12. 12

    如何在没有变量的情况下从枚举获取值

  13. 13

    如何在没有缓冲的情况下使用单个枚举检查IEnumerable的多个条件?

  14. 14

    如何在没有未定义行为的情况下实现快速反sqrt?

  15. 15

    Javascript-如何在没有shift()的情况下实现队列?

  16. 16

    Gulp:如何在没有Chrome的livereload插件的情况下实现livereload?

  17. 17

    如何在没有Akka的情况下实现actor模型?

  18. 18

    测试驱动开发-如何在没有实现代码的情况下编写测试

  19. 19

    如何在没有JQuery的情况下正确实现无限滚动的AngularJS表?

  20. 20

    如何在没有默认构造函数的情况下实现抽象类的Decorator类?

  21. 21

    如何在现代C ++中没有宏的情况下实现系统特定的功能

  22. 22

    如何在没有未定义行为的情况下实现快速反sqrt?

  23. 23

    X11:如何在没有聚焦损失的情况下实现全局热键

  24. 24

    我如何在没有calc的情况下实现这种等距布局?

  25. 25

    如何在没有dynamic_cast的情况下对派生类型实现“较少”?

  26. 26

    如何在没有默认构造函数的情况下实现抽象类的Decorator类?

  27. 27

    如何在没有CWinApp派生类的情况下实现MFC序列化?

  28. 28

    如何在没有 CodeRay 的情况下使用 RedCarpet 在我的博客中实现降价?

  29. 29

    如何在没有@或#等字符触发的情况下实现jquery自动完成

热门标签

归档