![](/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.