2012-02-28 49 views
0

有办法从varargsArrays.asList(o1, o2, o3 etc)Java:任何与数组类似的数组列表?

得到List有没有类似的方式得到一个array?例如。像Arrays.asArray(o1, o2, o3 etc)

更新:
o1,o2,o3是不同类型的对象

+0

Arrays.asList(O1,O2,O3等).toArray() – 2012-02-28 07:54:57

+1

当然要确保你真的想要* *的对象数组一些(深不可测)的原因(http:// stackoverflow。com/a/6105705/202214) – 2012-02-28 15:49:57

回答

1

List.toArray()的可能是你在找什么。 Javadoc可以在here找到。

+0

我认为他的意思是一种方法,它将varags作为参数,并允许从它们构造一个数组。 – jFrenetic 2012-02-28 07:57:01

3

您可以使用结构为String[] str = new String[] {"a", "b", "c"}

+2

'String [] str = {“a”,“b”,“c”};' – 2012-02-28 08:53:19

2

可变参数阵!

MyMethod(Param param, MyObject... args)

您可以分配MyObject[] array = args;

0

见这个例子:

public static void main(String[] args) { 
    List<String> list = new ArrayList<String>(); 
    list.add("a"); 
    list.add("b"); 
    list.add("c"); 
    list.add("d"); 
    list.add("e"); 
    list.add("f"); 
    String[] array = list.toArray(new String[0]); // Collection to array 
    for (int i = 0; i < array.length; ++i) { 
     String contents = array[i]; 
     System.out.print(contents+"\t"); 
    } 
    System.out.println(); 
    List<String> list2 = Arrays.asList(array); // Array back to Collection 
    for (String s2 : list2) { 
     String s3 = s2; 
     System.out.print(s3+"\t"); 
    } 
} 
1

使用这样的事情:

Element[] array = new Element[] { new Element(1),new Element(2),new Element(3) }; 

或者你可以创建一个列表,并将其转换成数组。这里是一个不错的样本,我从java2s有:

import java.util.ArrayList; 
import java.util.List; 

/** List to array */ 
public class ToArray { 
    public static void main(String[] args) { 
    List list = new ArrayList(); 
    list.add("Blobbo"); 
    list.add("Cracked"); 
    list.add("Dumbo"); 
    // list.add(new Date()); // Don't mix and match! 

    // Convert a collection to Object[], which can store objects 
    // of any type. 
    Object[] ol = list.toArray(); 
    System.out.println("Array of Object has length " + ol.length); 

    // This would throw an ArrayStoreException if the line 
    // "list.add(new Date())" above were uncommented. 
    String[] sl = (String[]) list.toArray(new String[0]); 
    System.out.println("Array of String has length " + sl.length); 
    } 
} 
+0

因此它必须是列表中的同一类型的对象?如果我需要不同类型的对象 – Jim 2012-02-28 08:49:51

+0

@Jim,那么可以发布另一个关于这个问题。 :) – ApprenticeHacker 2012-02-28 08:50:58

0

您可以使用临时数组:

MyType[] arr = new MyType[]{new MyType(1), new MyType(2)...}; 

,或者创建一个小技巧方法如:

public static <T> T[] createArray(T... args) { 
    return args; 
} 

然后像这样使用它:

MyType[] arr = createArray(new MyType(1), new MyType(2)...); 
+0

你的第一个例子中的ad hoc数组是什么,它不能为我编译 – Jim 2012-02-28 08:26:18

+0

@Jim'MyType'这里只是*任何你想要创建数组的类型。在结束大括号之前,还有三个点需要显示,您可以根据需要添加尽可能多的MyType实例。试试这个例子:'Object [] objArr = new Object [] {new Object(),new Object()};'' – jFrenetic 2012-02-28 09:15:33

1

你是指数组varargs?只要将它用作数组,因为它已经是一个数组。

public void t(Object obj...) { 
    Object obj0 = obj[0]; 
} 

或者你说过关于静态列表的数组?然后使用像Object objs = new Object[] {new Object, new Object, Object}这样的初始化构造。

另外,从List<T>到阵列使用方法List.toArray()

或者从varargs通过List数组,只是为了好玩:

public void t(Object obj...) { 
Object[] a = Arrays.asList(obj).toArray(); 
// or 
Object[] b = Arrays.asList(new Object, new Object).toArray(); 
} 

0

您可以分配给可变参数同样类型的数组直接

static void intTest(int... v) { 
    int[] arr = v; 
} 
static void objTest(Object... obj) { 
    Object[] arr = obj; 
}