【发布时间】:2011-11-16 14:38:21
【问题描述】:
我有一个类需要返回多个不同类型的数据对象,例如ArrayList<Integer> 和double[] 的数组。由于 java 只允许给定方法返回一个对象,因此我试图将各种数据对象捆绑到一个 ArrayList 中。但是,有两个问题:
我提出的代码无法读取 ArrayList 的每个索引中的对象类型。
具体来说,在下面的 ListOfObjects.java 中,Eclipse 在myAL1=dataHolder.get(0);行给了我一条错误消息,指出Type mismatch: cannot convert from Object to ArrayList<Integer>,然后是后面三个其他 get 语句的类似错误消息。我不知道要指定什么类型作为 ArrayList 的数据类型。
我的代码在下面的两个文件中。
谁能告诉我如何解决它,以便解决这两个问题?
我需要能够随后将 myAL1 用作 ArrayList,并使用 myDBL1、mtDBL2 , 和 myDBL3 作为 double[]。
ListOfObjects.java
import java.util.ArrayList;
public class ListOfObjects {
ArrayList<Integer> myAL1 = new ArrayList<Integer>();
double[] myDBL1 = new double[25];
double[] myDBL2 = new double[25];
double[] myDBL3 = new double[25];
public static void main(String[] args) {
}
public void myMethod() {
AssembleListOfObjects myLOO = new AssembleListOfObjects();
ArrayList dataHolder = myLOO.buildListOfObjects();
myAL1 = dataHolder.get(0);
myDBL1 = dataHolder.get(0);
myDBL2 = dataHolder.get(0);
myDBL3 = dataHolder.get(0);
}
}
AssembleListOfObjects.java
import java.util.ArrayList;
public class AssembleListOfObjects {
ArrayList<Integer> al1 = new ArrayList<Integer>();
double[] dbl1 = new double[25];
double[] dbl2 = new double[25];
double[] dbl3 = new double[25];
public void main(String[] args) {
buildListOfObjects();
}
public ArrayList buildListOfObjects() {
ArrayList ListOfObjects = new ArrayList();
ListOfObjects.add(al1);
ListOfObjects.add(dbl1);
ListOfObjects.add(dbl2);
ListOfObjects.add(dbl3);
return ListOfObjects;
}
}
编辑:
我按照你的方式重写了它,这就是我目前所拥有的。除非我在代码中的任何位置添加 static 修饰符,否则它会引发 java.lang.NoSuchMethodError: main 错误。
当我在任何地方添加静态修饰符时,它会打印出零数组和一个空数组列表。
您将如何修复此代码,以便 ListOfObjects 能够为每个数组/数组列表输出值?
但这里是代码:
ListOfObjects.java
import java.util.ArrayList;
public class ListOfObjects {
ArrayList<Integer> myAL1 = new ArrayList<Integer>();
double[] myDBL1 = new double[25];
double[] myDBL2 = new double[25];
double[] myDBL3 = new double[25];
public void main(String[] args) {
myMethod();
}
public void myMethod() {
AssembleListOfObjects myLOO = new AssembleListOfObjects();
myAL1 = myLOO.getAl1();
myDBL1 = myLOO.getDbl1();
myDBL2 = myLOO.getDbl2();
myDBL3 = myLOO.getDbl3();
System.out.print("myAL1 is: (");
for (int l = 0; l < myAL1.size(); l++) {
if (l == 0) {
System.out.print(myAL1.get(l));
} else {
System.out.print(", " + myAL1.get(l));
}
}
System.out.println(")");
System.out.print("myDBL1 is: (");
for (int l = 0; l < myDBL1.length; l++) {
if (l == 0) {
System.out.print(myDBL1[l]);
} else {
System.out.print(", " + myDBL1[l]);
}
}
System.out.println(")");
System.out.print("myDBL2 is: (");
for (int l = 0; l < myDBL2.length; l++) {
if (l == 0) {
System.out.print(myDBL2[l]);
} else {
System.out.print(", " + myDBL2[l]);
}
}
System.out.println(")");
System.out.print("myDBL3 is: (");
for (int l = 0; l < myDBL3.length; l++) {
if (l == 0) {
System.out.print(myDBL3[l]);
} else {
System.out.print(", " + myDBL3[l]);
}
}
System.out.println(")");
}
}
AssembleListOfObjects.java
import java.util.ArrayList;
public class AssembleListOfObjects {
private ArrayList<Integer> al1 = new ArrayList<Integer>();
int mySize = 25;
private double[] dbl1 = new double[mySize];
private double[] dbl2 = new double[mySize];
private double[] dbl3 = new double[mySize];
public void main(String[] args) {
setterMethod();
getAl1();
getDbl1();
getDbl2();
getDbl3();
}
public void setterMethod() {
for (int j = 0; j < mySize; j++) {
// the following lines are placeholders for a complex algorithm
dbl1[j] = j;
dbl2[j] = Math.pow((double) j, 3);
dbl3[j] = Math.cos((double) j);
if ((j % 3) == 0) {
al1.add(j);
}
}
}
public ArrayList<Integer> getAl1() {
return al1;
}
public double[] getDbl1() {
return dbl1;
}
public double[] getDbl2() {
return dbl2;
}
public double[] getDbl3() {
return dbl3;
}
}
【问题讨论】:
-
根据您的描述,我看不出冗余发生在哪里。您可能需要告诉我们更多细节。
-
@Hovercraft Full Of Eels 我不确定您要求提供哪些其他信息。但是,Eclipse 在编写或运行代码时会给出错误消息。并且所有的数据对象都是在运行一个非常复杂的算法的上下文中产生的。我需要提取数据对象,以便获得优化算法所需的信息。
标签: java arrays arraylist return return-type