Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在android标准类中使用静态final int来避免枚举?_Java_Android_Enums - Fatal编程技术网

Java 为什么在android标准类中使用静态final int来避免枚举?

Java 为什么在android标准类中使用静态final int来避免枚举?,java,android,enums,Java,Android,Enums,在standart中,android类static final intvars用于表示不同的标志。例如,查看可视性标志: /** @hide */ @IntDef({VISIBLE, INVISIBLE, GONE}) @Retention(RetentionPolicy.SOURCE) public @interface Visibility {} /** * This view is visible. * Use with {@link #setVisibility} and <

在standart中,android类
static final int
vars用于表示不同的标志。例如,查看可视性标志:

/** @hide */
@IntDef({VISIBLE, INVISIBLE, GONE})
@Retention(RetentionPolicy.SOURCE)
public @interface Visibility {}

/**
 * This view is visible.
 * Use with {@link #setVisibility} and <a href="#attr_android:visibility">{@code
 * android:visibility}.
 */
public static final int VISIBLE = 0x00000000;

/**
 * This view is invisible, but it still takes up space for layout purposes.
 * Use with {@link #setVisibility} and <a href="#attr_android:visibility">{@code
 * android:visibility}.
 */
public static final int INVISIBLE = 0x00000004;

/**
 * This view is invisible, and it doesn't take any space for layout
 * purposes. Use with {@link #setVisibility} and <a href="#attr_android:visibility">{@code
 * android:visibility}.
 */
public static final int GONE = 0x00000008;

/**
 * Mask for use with setFlags indicating bits used for visibility.
 * {@hide}
 */
static final int VISIBILITY_MASK = 0x0000000C;

private static final int[] VISIBILITY_FLAGS = {VISIBLE, INVISIBLE, GONE};
/**@隐藏*/
@IntDef({可见,不可见,消失})
@保留(RetentionPolicy.SOURCE)
public@interface可见性{}
/**
*此视图可见。
*与{@link#setVisibility}和{@code一起使用
*android:visibility}。
*/
公共静态最终可见整数=0x00000000;
/**
*此视图是不可见的,但仍会占用空间用于布局。
*与{@link#setVisibility}和{@code一起使用
*android:visibility}。
*/
公共静态final int INVISIBLE=0x00000004;
/**
*此视图是不可见的,并且不占用任何布局空间
*目的。与{@link#setVisibility}和{@code一起使用
*android:visibility}。
*/
公共静态最终整数=0x00000008;
/**
*用于指示用于可见性的位的设置标志的掩码。
*{@hide}
*/
静态最终整数可见性\u掩码=0x0000000C;
私有静态final int[]可见性_标志={可见,不可见,消失};

为什么开发人员在这种情况下避免使用
enum

因为enum很昂贵。首先,它们是弦。这意味着比较两者是字符串比较,而不是整数比较,这可能是成本的许多倍。其次,它们是物体。在内存有限的设备上创建大量小对象是一种很好的方法,因为存在碎片,每次分配都需要花费时间。因此,他们的表现很糟糕


Java在设计枚举时真的搞砸了——它们不应该是对象或字符串。即使是面向服务器端性能的代码也会避免使用INT。因为枚举非常昂贵。首先,它们是弦。这意味着比较两者是字符串比较,而不是整数比较,这可能是成本的许多倍。其次,它们是物体。在内存有限的设备上创建大量小对象是一种很好的方法,因为存在碎片,每次分配都需要花费时间。因此,他们的表现很糟糕


Java在设计枚举时真的搞砸了——它们不应该是对象或字符串。即使是面向服务器端性能的代码也会避免使用INT。正如其他人所说,他们这样做主要是为了性能。主要的性能影响是它们使用的内存量

我觉得这是这件事上最好的资源(从马口中)

我知道一个视频在这里是不寻常的,所以它是最关键的资源

一个侧重点:
虽然枚举并没有经过性能优化,但在Android Studio中完成的大多数应用程序如果在编译时使用Progourd将所有枚举转换为静态最终整数,则应该可以。我这样做是因为我发现枚举更具表现力。

正如其他人所说,它们主要是为了性能。主要的性能影响是它们使用的内存量

我觉得这是这件事上最好的资源(从马口中)

我知道一个视频在这里是不寻常的,所以它是最关键的资源

一个侧重点:
虽然枚举并没有经过性能优化,但在Android Studio中完成的大多数应用程序如果在编译时使用Progourd将所有枚举转换为静态最终整数,则应该可以。我这样做是因为我发现枚举更具表现力。

要么代码早于Java 5,要么开发人员选择使用静态
int
(可能用于位篡改)。@ElliottFrisch位篡改有时是原因。但更大的原因是性能,枚举的实现非常糟糕。要么代码早于Java 5,要么开发人员选择使用静态
int
(可能是为了位篡改)。@ElliottFrisch位篡改有时是原因。但是更大的原因是perf,枚举的实现是为了提高性能。“首先,它们是字符串”——不,它们是Java类。“这意味着比较两个是字符串比较,而不是int比较”--不,这是对象标识比较。“在内存有限的设备上创建大量小对象是一种很好的方法,因为存在碎片,而且每次分配都要花费时间”——尽管如此,创建大量枚举实例本身是反模式的,而不是枚举本身。这与任何其他类没有显著区别,因为创建大量实例是反模式的。要学究,是的,它们是带有字符串变量成员的类。帖子的其余部分都没有变化。他们是一个可怕的设计决策,使用他们是反性能的。Sun搞砸了,他实际上写了一些东西,他不同意你的观点,“首先,它们是字符串”--不,它们是Java类。“这意味着比较两个是字符串比较,而不是int比较”--不,这是对象标识比较。“在内存有限的设备上创建大量小对象是一种很好的方法,因为存在碎片,而且每次分配都要花费时间”——尽管如此,创建大量枚举实例本身是反模式的,而不是枚举本身。这与任何其他类没有显著区别,因为创建大量实例是反模式的。要学究,是的,它们是带有字符串变量成员的类。帖子的其余部分都没有变化。他们是一个可怕的设计决策,使用他们是反性能的。“孙搞砸了,他实际上写了一些东西,他不同意你的意见。”ChieftwoilsFixed@ChiefTwoPencils固定的