相关疑难解决方法(0)

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万
查看次数

在Java中定义错误代码/字符串的最佳方法?

我正在用Java编写Web服务,我试图找出定义错误代码及其相关错误字符串的最佳方法.我需要将数字错误代码和错误字符串组合在一起.错误代码和错误字符串都将发送到访问Web服务的客户端.例如,当发生SQLException时,我可能想要执行以下操作:

// Example: errorCode = 1, 
//          errorString = "There was a problem accessing the database."
throw new SomeWebServiceException(errorCode, errorString);
Run Code Online (Sandbox Code Playgroud)

客户端程序可能会显示以下消息:

"发生错误#1:访问数据库时出现问题."

我的第一个想法是使用Enum错误代码并覆盖toString方法以返回错误字符串.这是我想出的:

public enum Errors {
  DATABASE {
    @Override
    public String toString() {
      return "A database error has occured.";
    }
  },

  DUPLICATE_USER {
    @Override
    public String toString() {
      return "This user already exists.";
    }
  },

  // more errors follow
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:有更好的方法吗?我更喜欢代码中的解决方案,而不是从外部文件读取.我在这个项目中使用Javadoc,并且能够在线记录错误代码并在文档中自动更新它们会很有帮助.

java enums

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

接口常量有什么用?

我正在学习Java,并且发现接口可以有字段,这些字段是public static和final.到目前为止,我还没有看到这些例子.这些接口常量的一些用例有哪些,我可以在Java标准库中看到一些吗?

java interface constants

114
推荐指数
4
解决办法
7万
查看次数

接口常量的优缺点

PHP接口允许在接口中定义常量,例如

interface FooBar
{
    const FOO = 1;
    const BAR = 2;
}
echo FooBar::FOO; // 1
Run Code Online (Sandbox Code Playgroud)

任何实现类都将自动提供这些常量,例如

class MyFooBar implement FooBar
{
}
echo MyFooBar::FOO; // 1
Run Code Online (Sandbox Code Playgroud)

我对此的看法是,任何Global都是邪恶的.但我想知道接口常量是否同样适用.鉴于对接口的编码通常被认为是良好的做法,使用接口常量是在类上下文之外使用的唯一常量吗?

虽然我很想听听您的个人意见以及您是否使用界面常量,但我主要是在您的答案中寻找客观原因.我不希望这是一个民意调查问题.我对使用接口常量对可维护性有什么影响感兴趣.耦合.或单元测试.它与SOLID PHP有什么关系?它是否违反了任何被认为是PHP良好实践的编码原则?你明白了......

注意: Java有一个类似的问题列出了一些很好的理由,说明它们是Bad Practice,但由于Java不是PHP,我认为再次在PHP标记中提出它是合理的.

php interface constants

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

如何在Java中定义一类常量?

假设您需要定义一个类,它所做的就是保持常量.

public static final String SOME_CONST = "SOME_VALUE";
Run Code Online (Sandbox Code Playgroud)

这样做的首选方式是什么?

  1. 接口
  2. 抽象类
  3. 最后一堂课

我应该使用哪一个?为什么?


澄清一些答案:

枚举 - 我不会使用枚举,我不会枚举任何东西,只是收集一些与任何方式无关的常量.

接口 - 我不打算将任何类设置为实现接口的类.只想使用接口调用常量,如下所示:ISomeInterface.SOME_CONST.

java class-constants

72
推荐指数
5
解决办法
9万
查看次数

接口中的字段

我在Java中有一个基本问题,但这是OOP中的一个普遍问题.为什么接口允许设置字段?这不是一个接口应该做的事情吗?

我理解它的方式,界面是英语中的形容词.因此,如果我的类实现了Runnable和Serializable接口,那么我确保用户我的类将满足条件为Runnable和Seriablizable.但是,这意味着接口是"无状态的",但允许它们在Java中有字段...

我错过了什么吗?

java oop interface

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

在许多类中共享Java中的常量字符串?

我想在一个地方拥有Java常量字符串,并在整个项目中使用它们(许多类).

推荐的方法是什么?

java string

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

在Java中定义几个不相关类中使用的常量的位置

在Java中定义常量的位置的问题在论坛中出现了很多次,但我很难找到一个我觉得舒服的解决方案.

为简单起见,假设我有两个类:WriteMyDataReadMyData.None是另一个的子类.两个类共享两个对其操作至关重要的常量:String DELIMITERint LENGTH.将来我可能想要更改这些常量的值,以便在适当的地方定义它们.

这种共识似乎常常有利于这种enum类型.但是,在我的情况下没有什么可以枚举,所以我最终只有一个项目enum,我打电话DEFAULT:

public enum DataSettings {
    DEFAULT(",", 32);

    private final String delimiter;
    private final int length;

    DataSettings(String delmiter, int length) {
        this.delimiter = delimiter;
        this.length = length;
    }

    public String getDelimiter() { return delimiter; }
    public int getLength() { return length; }
}
Run Code Online (Sandbox Code Playgroud)

因此,在我的两个类中,我通过DataSettings.DEFAULT.getDelimiter()和访问常量DataSettings.DEFAULT.getLength().

这是非常好的OO风格吗?是否使用enum过度杀伤?如果我不使用enum,我该怎么做?为常量创建一个接口似乎不受欢迎,而且我的类似乎没有自然的超类来源.初学者错误是只有一个默认项目enum吗?

java enums constants

7
推荐指数
1
解决办法
4227
查看次数

为常量创建接口

可能重复:
与java中的静态字段接口以共享'常量'

我们需要在很多类中使用常量,我的问题是它是否是使用public属性或其他东西创建接口的最佳实践...

public static final String NAME = "Name";
Run Code Online (Sandbox Code Playgroud)

谢谢!

java

3
推荐指数
1
解决办法
281
查看次数

如何避免在java中创建多个字符串对象?

我有一个场景,我正在使用一个Query对象和一个StringBuffer,我将构建一个SQL查询来执行.

这里是:

countQueryBuf.append("Select count(e) From " + clz.getSimpleName()
            + " e");
Run Code Online (Sandbox Code Playgroud)

在这里,我的大四学生告诉我,使用字符串文字是不好的做法"Select count(e) from ".我们可以做到:

string public final static selectCount="Select count(e) From "` 
Run Code Online (Sandbox Code Playgroud)

在一个接口中,然后在字符串缓冲区中使用它.但是在看到这个与java中的静态字段的接口共享"常量"问题之后,这说明这是不好的做法,我很困惑.谁能告诉我什么是最好的方法来证明我的情景?

java string

3
推荐指数
1
解决办法
627
查看次数

标签 统计

java ×9

constants ×3

enums ×3

interface ×3

string ×2

class-constants ×1

oop ×1

php ×1