通用数组如何添加set方法?

时间:2016-01-10 19:13:14

标签: java arrays generics

我想写一个方法,帮助我在泛型类变量中存储一些东西。我不太了解一个概念:(

我想写一个替代这个简单解决方案的方法:

a.myObject[0]=tracks;

并且当我作为参数给出数组索引

时,它将与其他元素一起使用

我想找出类似这种方法的东西(但是设定一个值)。有人知道怎么做吗?

E get(int i) {
    return (E) myObject[i];
}

我的源代码:

import java.util.Arrays;
import java.util.List;

public class GenericArray<E>{

private Object[] myObject;  

public GenericArray(int s) {
    myObject = new Object[s];
}

E get(int i) {
    return (E) myObject[i];
}


public static <Track> void main(String[] args) {

    GenericArray a = new GenericArray(100);

    List<String> tracks = Arrays.asList("One", "Two", "Three");

    PlayList play = new PlayList(tracks);

    a.myObject[0]=tracks;

    System.out.println(a.get(0));

}

}

3 个答案:

答案 0 :(得分:1)

无法创建通用数组,因此将其更改为集合。 我稍微调整了你的代码示例:

public class GenericArray<E extends Object> {

    private List<E> myObject;

    public GenericArray(int s) {
        //myObject = new E[s];//can not create a generic array
        myObject = new ArrayList<>(s);
    }

    public E get(int i) {
        return myObject.get(i);
    }

    public void set(int i, E object){
        myObject.set(i, object);
    }

    public static void main(String[] args) {

        GenericArray<Object> a = new GenericArray<>(100);

        List<String> tracks = Arrays.asList("One", "Two", "Three");

        PlayList play = new PlayList(tracks);

        a.set(0, tracks);

        System.out.println(a.get(0));

    }

}
嗯...我认为这是因为集合中从未添加过任何东西。 (它有容量,但没有元素)。 我查看了关于泛型数组的注释,所以这是另一个例子,这个应该可以工作:

public class GenericArray<E extends Object> {
    private E[] myObject;

    public GenericArray(Class<E> c,int s) {
        //myObject = new E[s];//can not create a generic array
        @SuppressWarnings("unchecked")
        final E[] a = (E[]) Array.newInstance(c, s);
        myObject = a;
    }

    public E get(int i) {
        return myObject[i];
    }

    public void set(int i, E object){
        myObject[i] = object;
    }

    public static void main(String[] args) {

        GenericArray<Object> a = new GenericArray<>(Object.class,100);

        List<String> tracks = Arrays.asList("One", "Two", "Three");

        PlayList play = new PlayList(tracks);

        a.set(0, tracks);

        System.out.println(a.get(0));

    }

}

答案 1 :(得分:0)

我认为最好使用预定义的集合来减少错误的数量,并使代码更清晰,以便其他开发人员或在很长一段时间内返回它的时候。 查看ArrayList集合,例如:

    Object tracks = new Object();
    List<Object> myList = new ArrayList<Object>();
    myList.add(0, tracks);
    //myList.add(tracks); // or just use add to prevent IndexOutOfBoundsException

答案 2 :(得分:0)

因此,您希望创建一个set方法来为通用数组赋值。我希望这段代码可以帮助你... public void set(int i,Object obj){myObject [i] = obj;}