相关疑难解决方法(0)

什么是枚举,为什么它们有用?

今天我正在浏览这个网站上的一些问题,我发现提到了一个enum 单独使用模式的关于这种解决方案所谓的线程安全的好处.

我从来没有使用过enums,而且我已经用Java编程了好几年了.显然他们改变了很多.现在他们甚至在自己内部全力支持OOP.

现在为什么我应该在日常编程中使用枚举?

java enums

464
推荐指数
13
解决办法
28万
查看次数

Java枚举与具有公共静态最终字段的类相比有什么优势?

我对C#非常熟悉,但开始在Java中工作更多.我希望得知Java中的枚举基本上与C#中的枚举相同,但显然情况并非如此.最初,我很高兴得知Java枚举可能包含多个数据,这似乎非常有利(http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html).但是,从那时起我发现C#中缺少许多功能,例如能够轻松地为枚举元素分配特定值,以及因此无需花费大量精力就能将整数转换为枚举(即整数值转换为相匹配的Java枚举).

所以我的问题是:对于带有一堆公共静态最终字段的类,Java枚举是否有任何好处?或者它只提供更紧凑的语法?

编辑:让我更清楚.Java枚举对于具有相同类型的一组公共静态最终字段类有什么好处?例如,在第一个链接的行星示例中,枚举对具有这些公共常量的类有什么好处:

public static final Planet MERCURY = new Planet(3.303e+23, 2.4397e6);
public static final Planet VENUS = new Planet(4.869e+24, 6.0518e6);
public static final Planet EARTH = new Planet(5.976e+24, 6.37814e6);
public static final Planet MARS = new Planet(6.421e+23, 3.3972e6);
public static final Planet JUPITER = new Planet(1.9e+27, 7.1492e7);
public static final Planet SATURN = new Planet(5.688e+26, 6.0268e7);
public static final Planet URANUS = new Planet(8.686e+25, 2.5559e7);
public static final Planet NEPTUNE = …
Run Code Online (Sandbox Code Playgroud)

java enums

134
推荐指数
10
解决办法
11万
查看次数

为什么Android使用Ints而不是Enums

阅读关于Android,我可以看到使用这个框架的许多部分int常量返回值,或配置值(也喜欢在这里START_REDELIVER_INTENT),而不是一个enum,这是据我所知是可以找到的原因有很多更好的选择在网络上,像这样.

所以这让我想知道......为什么Google决定使用这么多int's而不是enum's

java int enums android

12
推荐指数
2
解决办法
1773
查看次数

将Linkedlist转换为ArrayList

我不得不编写一个程序来做LZWDecode,我决定使用LinkedList编写下面的LZWDecode程序,但我想将它转换为ArrayList.任何人都知道如何将LinkedList转换为ArrayList以使其更简单.谢谢.

import java.util.*;

public class LZWDecoder {

private final int CLEAR_TABLE=256;
private final int END_OF_DATA=257;
private final int TABLE_SIZE=4096;

private static LinkedList<Integer> input = new LinkedList<Integer>();
@SuppressWarnings("unchecked")
private LinkedList<Integer>[] table
        = new LinkedList[TABLE_SIZE];
private LinkedList<Integer> temp = new LinkedList<Integer>();
private int index = 258;
private LinkedList<String> trace = new LinkedList<String>();
private boolean view = true;

private void enterData() {
Scanner scan = new Scanner(System.in);
System.out.println("Please enter the Input Code (EOD = 257):");
int n=0;
while(n!=END_OF_DATA && scan.hasNextInt()){
n = scan.nextInt(); …
Run Code Online (Sandbox Code Playgroud)

java arraylist

6
推荐指数
2
解决办法
2万
查看次数

Java枚举(或int常量)vs c enum

我正试图在C中做一些通常看起来像这样的事情:

typedef enum {
    HTTP  =80, 
    TELNET=23, 
    SMTP  =25, 
    SSH   =22, 
    GOPHER=70} TcpPort;
Run Code Online (Sandbox Code Playgroud)

方法1

以下是我在Java中使用的内容enum:

public static enum TcpPort{
    HTTP(80),
    TELNET(23),
    SMTP(25),
    SSH(22),
    GOPHER(70);

    private static final HashMap<Integer,TcpPort> portsByNumber;
    static{
        portsByNumber = new HashMap<Integer,TcpPort>();
        for(TcpPort port : TcpPort.values()){
            portsByNumber.put(port.getValue(),port);
        }
    }
    private final int value;
    TcpPort(int value){
        this.value = value;
    }
    public int getValue(){
        return value;
    }
    public static TcpPort getForValue(int value){
        return portsByNumber.get(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

方法1 - 问题

我发现我不得不在不同的地方重复这种模式,但是想知道:有更好的方法吗?特别是因为:

  1. 这似乎令人费解,不那么优雅,而且
  2. 它还将编译时间改为运行时".

我使用此映射的原因之一是因为它在switch语句中看起来更好,例如:

switch(tcpPort){
    case HTTP:
        doHttpStuff();
        break; …
Run Code Online (Sandbox Code Playgroud)

java enums coding-style

6
推荐指数
1
解决办法
645
查看次数

在具有不同数据类型的java中使用Enums

为什么说在java中使用枚举更好.如果你有不同数据类型的常量,我认为最好使用带常量的类而不是枚举?

喜欢

Class A { 
    public static int A = 1;
    public static int B = 2;
    public static String c = "RADIUS";  
    public static String d = "LENGTH"; 
}
Run Code Online (Sandbox Code Playgroud)

代替

enum ofInts {A(1), B(2)}
enum ofStrings{c("RADUIS"), d("LENGTH")}
Run Code Online (Sandbox Code Playgroud)

java enums

2
推荐指数
1
解决办法
1658
查看次数

标签 统计

java ×6

enums ×5

android ×1

arraylist ×1

coding-style ×1

int ×1