创建单例数组的最佳方法

时间:2010-08-27 08:34:59

标签: java arrays

创建单例(只有一个元素)的“最简单”方法是什么?Java中的对象数组?

7 个答案:

答案 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 };