创建单例(只有一个元素)的“最简单”方法是什么?Java中的对象数组?
答案 0 :(得分:35)
Object [] singleton = { new SomeObject() };
答案 1 :(得分:15)
标准方法是:
String[] arr = new String[]{"I am the one and only"};
我担心它不会比这简单得多。
编辑:确实:
String[] arr = {"I am the one and only"};
感谢aioobe,我一直忘记这一点。
当然,如果你经常创建数组,你可以创建一个帮助方法,使事情变得更简单:
public static <T> T[] asArray(T... items){
return items;
}
String[] arr = asArray("I am the one and only");
(但是你不能在编译时强制它只是一个只有一个元素的数组)
接下来我打算编写一个单例数组方法,但Stephen beat me to that。
答案 2 :(得分:5)
枚举解决方案(反射攻击):
enum MySingleton{
INSTANCE(new String[]{"a","b"});
final String[] values;
private MySingleton(String[] values) {
this.values = values;
}
}
将其引用为:
MySingleton.INSTANCE;
答案 3 :(得分:4)
这应该做的工作
public SomeType[] makeSingletonArray(SomeType elem) {
return new SomeType[]{elem};
}
此方法的通用版本使用起来有些尴尬,因为您需要将Class
对象作为附加参数传递给它。
内联SomeType[]{elem}
表达式更简单,这就是我通常这样做的方式。
答案 4 :(得分:3)
如果您的项目已经在使用Apache Commons lib,您可以坚持使用ArrayUtils.toArray()
方法。
String[] arr = ArrayUtils.toArray("The string");
// or if using static import
String[] arr = toArray("The string");
即使使用静态导入,它仍然比接受的答案更详细:
String[] arr = {"The string"};
但是当不允许使用紧凑数组初始值设定语法时它非常方便。
一些例子:
someMethod(toArray("The string"), /* other params */);
return toArray("The string");
@DataProvider
public Object[][] someDataProvider() {
return rangeClosed(-12, +12)
.map(HOURS::toMillis).boxed()
.map(ArrayUtils::toArray)
.toArray(Object[][]::new);
}
你可以想象自己的任何其他例子。
另请注意,ArrayUtils.toArray()
可以将任意数量的对象包装到数组中,而不仅仅是一个。
答案 5 :(得分:2)
你可以这样做:
String[] a = Collections.
singletonList
("SingleElement").toArray();
编辑:哎呀!上面的例子没有编译。如评论中所述,这可以作为:
Object[] a = Collections.singletonList("SingleElement").toArray();
或
String[] a = Collections.singletonList("SingleElement").toArray(new String[1]);
答案 6 :(得分:0)
Java 中的数组是可变的。
但是如果你想在数组中创建单个对象,你可以这样做:
Object[] objArray = new Object[] { put your object here };