我想写一个方法,帮助我在泛型类变量中存储一些东西。我不太了解一个概念:(
我想写一个替代这个简单解决方案的方法:
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));
}
}
答案 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;}