将枚举元素的名称作为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" }.
为什么以下打印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
是否有任何内置方法可以让用户从当前运行的JAR中提取文件并将其保存在磁盘上?
提前致谢.
我刚读了一些由经验丰富的程序员编写的代码,我发现了以下内容:
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键值对,而不创建虚拟占位符映射或使字段成为不可变映射.我在这里错过了什么吗?
在此线程中,有关单例实例的内容如下:
静态变量可以是 GetInstance() 函数中的静态变量,也可以是 Singleton 类中的静态变量。这里有一些有趣的权衡。
这些权衡是什么?我知道,如果声明为static函数变量,则在首次调用该函数之前不会构造单例。我还读过一些有关线程安全的内容,但我不知道这到底意味着什么,也不知道这两种方法在这方面有何不同。
两者之间还有其他主要区别吗?哪种方法更好?
在我的具体示例中,我将一个工厂类设置为单例,并将该实例存储为static const类中的字段。我没有getInstance()方法,而是希望用户直接访问实例,如下所示ItemFactory::factory:默认构造函数是私有的,并且实例是静态分配的。
operator()附录:重载调用单例的方法是个好主意createItem(),这样就Item可以像这样创建 s ItemFactory::factory("id"):?
假设我正在扩展JFileChooser并制作一个易于使用的版本,我正在调用它SimpleFileChooser.
它被构造为使得它可以是DIALOG_TYPE_OPEN或DIALOG_TYPE_SAVE-因此,JFileChooser的showOpenDialog()和showSaveDialog()方法是多余的.我用一个叫做showDialog()返回布尔值的方法替换它们,但这就是我发现自己处于两难境地的地方:
我应该覆盖打开/保存方法并
@Deprecated为它们添加标签,以便API用户知道它们已经被取代了吗?这会违反注释的最初目的吗?或者文档中的通知是否足够?如果是这样,这个通知应该放在哪里:在类摘要中或在覆盖的方法之上?我是否应该首先覆盖这些方法?
提前致谢.
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;
我无法决定应使用这三个中的哪一个。我可以:
在示例中,请不要使用括号并冒着可读性差的危险,例如:
min[0] = min[0] > pos.x ? pos.x : 0;
始终使用括号,但冒着简短表达式中有些难看的代码的风险:
setValue(val + scrollBar.getBlockIncrement() * ((scrollsUp) ? -1 : 1));
当条件中有空格时,请放在两者之间,并使用括号;但如果条件只是布尔变量,则不要使用括号:
min[0] = (min[0] > …
java coding-style conventions ternary-operator conditional-operator
java ×5
c++ ×2
arrays ×1
c++14 ×1
coding-style ×1
collections ×1
constants ×1
conventions ×1
deprecated ×1
enums ×1
evaluation ×1
extract ×1
file ×1
immutability ×1
inheritance ×1
io ×1
jar ×1
map ×1
oop ×1
overriding ×1
singleton ×1