小编Kon*_*tin的帖子

将枚举中的所有名称作为String []

将枚举元素的名称作为Strings 数组的最简单和/或最短的方法是什么?

我的意思是,例如,如果我有以下枚举:

public enum State {
    NEW,
    RUNNABLE,
    BLOCKED,
    WAITING,
    TIMED_WAITING,
    TERMINATED;

    public static String[] names() {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

names()方法将返回一个类似的数组{ "NEW", "RUNNABLE", "BLOCKED", "WAITING", "TIMED_WAITING", "TERMINATED" }.

java arrays enums

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

为什么' - ++ a- - ++ + b--'按此顺序进行评估?

为什么以下打印bD aD aB aA aC aU而不是aD aB aA aC bD aU?换句话说,为什么b--之前进行评估--++a--++

#include <iostream>
using namespace std;

class A {
    char c_;
public:
    A(char c) : c_(c) {}
    A& operator++() {
        cout << c_ << "A ";
        return *this;
    }
    A& operator++(int) {
        cout << c_ << "B ";
        return *this;
    }
    A& operator--() {
        cout << c_ << "C ";
        return *this;
    }
    A& operator--(int) {
        cout << c_ << "D "; …
Run Code Online (Sandbox Code Playgroud)

c++ evaluation operator-overloading operator-precedence compiler-optimization

16
推荐指数
3
解决办法
2848
查看次数

通过代码从当前运行的JAR中提取文件

是否有任何内置方法可以让用户从当前运行的JAR中提取文件并将其保存在磁盘上?

提前致谢.

java io jar file extract

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

为什么私有静态最终列表/集/地图不可修改?

我刚读了一些由经验丰富的程序员编写的代码,我发现了以下内容:

public class ConsoleFormatter extends Formatter {
    private static final Map<Level, String> PREFIXES;

    static {
        Map<Level, String> prefixes = new HashMap<Level, String>();
        prefixes.put(Level.CONFIG,  "[config]");
        prefixes.put(Level.FINE,    "[debug]");
        prefixes.put(Level.FINER,   "[debug]");
        prefixes.put(Level.FINEST,  "[trace]");
        prefixes.put(Level.INFO,    "[info]");
        prefixes.put(Level.SEVERE,  "[error]");
        prefixes.put(Level.WARNING, "[warning]");

        PREFIXES = Collections.unmodifiableMap(prefixes);
    }

    // ...

}
Run Code Online (Sandbox Code Playgroud)

如您所见,这是一个用于格式化日志输出的类.然而,引起我注意的是静态初始化程序块中的代码:PREFIXES = Collections.unmodifiableMap(prefixes);.

为什么要PREFIXES制作一个不可修改的地图?它是一个私有常量,因此不存在修改该类之外的数据的风​​险.这样做是为了让常数的不变性成为一种完整感吗?

就个人而言,我会直接初始化PREFIXES为a HashMap,然后直接初始化put键值对,而不创建虚拟占位符映射或使字段成为不可变映射.我在这里错过了什么吗?

java collections constants map immutability

9
推荐指数
2
解决办法
6408
查看次数

getInstance() 方法中作为静态字段的单例实例与静态变量

此线程中,有关单例实例的内容如下:

静态变量可以是 GetInstance() 函数中的静态变量,也可以是 Singleton 类中的静态变量。这里有一些有趣的权衡。

这些权衡是什么?我知道,如果声明为static函数变量,则在首次调用该函数之前不会构造单例。我还读过一些有关线程安全的内容,但我不知道这到底意味着什么,也不知道这两种方法在这方面有何不同。

两者之间还有其他主要区别吗?哪种方法更好?

在我的具体示例中,我将一个工厂类设置为单例,并将该实例存储为static const类中的字段。我没有getInstance()方法,而是希望用户直接访问实例,如下所示ItemFactory::factory:默认构造函数是私有的,并且实例是静态分配的。

operator()附录:重载调用单例的方法是个好主意createItem(),这样就Item可以像这样创建 s ItemFactory::factory("id"):?

c++ singleton design-patterns static-members c++14

5
推荐指数
1
解决办法
4647
查看次数

我应该@Deprecate超类方法吗?

假设我正在扩展JFileChooser并制作一个易于使用的版本,我正在调用它SimpleFileChooser.

它被构造为使得它可以是DIALOG_TYPE_OPENDIALOG_TYPE_SAVE-因此,JFileChoosershowOpenDialog()showSaveDialog()方法是多余的.我用一个叫做showDialog()返回布尔值的方法替换它们,但这就是我发现自己处于两难境地的地方:

我应该覆盖打开/保存方法并@Deprecated为它们添加标签,以便API用户知道它们已经被取代了吗?这会违反注释的最初目的吗?

或者文档中的通知是否足够?如果是这样,这个通知应该放在哪里:在类摘要中或在覆盖的方法之上?我是否应该首先覆盖这些方法?

提前致谢.

java oop inheritance overriding deprecated

4
推荐指数
1
解决办法
594
查看次数

条件(三元)运算符代码样式

int foo = bar > baz ? bar : baz;

int foo = someBoolean ? bar : baz;


int foo = (bar > baz) ? bar : baz;

int foo = (someBoolean) ? bar : baz;


int foo = (bar > baz) ? bar : baz;

int foo = someBoolean ? bar : baz;

我无法决定应使用这三个中的哪一个。我可以:

  1. 在示例中,请不要使用括号并冒着可读性差的危险,例如:

    min[0] = min[0] > pos.x ? pos.x : 0;

  2. 始终使用括号,但冒着简短表达式中有些难看的代码的风险:

    setValue(val + scrollBar.getBlockIncrement() * ((scrollsUp) ? -1 : 1));

  3. 当条件中有空格时,请放在两者之间,并使用括号;但如果条件只是布尔变量,则不要使用括号:

    min[0] = (min[0] > …

java coding-style conventions ternary-operator conditional-operator

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