我正在尝试访问ArrayList中对象的方法和值。我有一个有效的系统,但想知道是否有更好的方法。我简化了代码来说明我在做什么。在实际代码中,我将有数百个“Test”对象,并且可以通过将索引传递给list.get()方法来遍历它们。我觉得应该有一种更好的方法来访问方法,而不是创建一个临时的Test对象来获取它们 类似的东西:
列出列表中index.theObjectsMethod(传递值)的对象
而不是我做了什么:
import java.util.ArrayList;
public class Test {
static ArrayList<Object> list = new ArrayList<>();
private int index;
private int value;
public Test(int index, int value) {
this.index = index;
this.value = value;
}
public int add(int x, int y) {
value = x + y;
return value;
}
public int subtract(int x, int y) {
return x - y;
}
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
Test theTest = new Test(i, i + 1);
list.add(i, theTest);
}
/*
* my way of accessing the methods
*/
Test tempTest = (Test) list.get(0);
tempTest.add(12, 1);
System.out.println(tempTest.value);
Test tTest = (Test) list.get(1);
System.out.println(tTest.value);
}
}
我使用了一个arrayList,因为我需要循环遍历结构,并访问特定的索引位置。
答案 0 :(得分:1)
您已创建List
Object
。因此,任何迭代都只能访问Object
类的方法。你可以:
List<Test> list = new ArrayList<>();
这种方法允许您访问该值而不必像在您发布的代码中那样对其进行封装。例如:
for (Test test : list) {
test.add(1, 2);
}
或者:
Test t = list.get(0); //though watch out for empty list, etc.
t.subtract(2, 1);
顺便说一下,当添加到列表时,默认它要追加,所以你可以简单地做一些类似添加到列表的事情。
for (int i = 0; i < 5; ++i) {
Test t = new Test(i, i+1);
list.add(t);
}
答案 1 :(得分:1)
每个Test
对象都有其索引,因此我认为您只需通过调用Test
向list
添加list.add(theTest);
个对象。要通过索引在Test
中获取list
对象,您可以覆盖get
list
方法。我认为这可以帮到你:
import java.util.ArrayList;
public class Test {
private final int index;
private int value;
public Test(int index, int value) {
this.index = index;
this.value = value;
}
public int add(int x, int y) {
value = x + y;
return value;
}
public int subtract(int x, int y) {
return x - y;
}
public int getIndex() {
return this.index;
}
public static void main(String[] args) {
ArrayList<Test> list = new ArrayList<Test>() {
@Override
public Test get(int index) {
for(Test theTest : this) {
if(theTest.getIndex()==index){
return theTest;
}
}
return null;
}
};
for (int i = 0; i < 5; i++) {
Test theTest = new Test(i, i + 1);
list.add(theTest);
}
/**
** my way of accessing the methods
**/
Test tempTest = list.get(0);
tempTest.add(12, 1);
System.out.println(tempTest.value);
Test tTest = list.get(1);
System.out.println(tTest.value);
}
}