![](/img/trans.png)
[英]Android Performance: Strings vs. Enums vs. Static Final Ints
[英]Android: enum vs static final ints?
在Java Android应用程序中使用enum
与拥有一组static final int
的优点(或缺点)是什么? 是否存在有利于使用其中一种或另一种的效率或性能优化?
我在上下文中询问了这个请求代码等等 - 它往往是Android示例代码中的内容,而不是我在C中习惯的枚举值。
从个人经验中得出的一个非常简单的答案是,Enums提供了更好的类型安全性,换句话说,编译器可以在保持代码bug免费方面发挥更积极的作用。
另一方面,因为Enums是对象世界的“二等公民”,所以它们很难用于当今常用的一些更微妙的设计模式,特别是涉及泛型时。
最后,您可以在位域中使用静态最终整数。 你不能用枚举做以下事情:
int selectedOptions = Options.OPTION1 | Options.OPTION2 | Options.OPTION3;
嗯......根据一个秃头男人的说法,Enums 真的很难记忆 。
你应该使用@ IntDef / @ StringDef注释:
public static final int NAVIGATION_MODE_STANDARD = 0;
public static final int NAVIGATION_MODE_LIST = 1;
public static final int NAVIGATION_MODE_TABS = 2;
@IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
public @interface NavigationMode {}
然后
@NavigationMode
public abstract int getNavigationMode();
public abstract void setNavigationMode(@NavigationMode int mode);
对枚举进行整数的一个优点是在CLASS FACTORY中。 以下C#代码不可扩展:
class Factory
{
public enum DrawableType {CIRCLE,SQUARE};
public static Drawable GetInstance(DrawableEnum e)
{
if (e == DrawableType.CIRCLE)
{
return new Circle();
}
else if (e == DrawableType.SQUARE)
{
return new Square();
}
else
{
throw new IndexOutOfRangeException(); // should never get here
}
}
我写了这个糟糕的代码。 回顾设计模式,四人一组使用了int。 我试图在这里恢复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.