Java 从ArrayList访问特定对象字段
假设我们创建一个Java 从ArrayList访问特定对象字段,java,object,arraylist,field,Java,Object,Arraylist,Field,假设我们创建一个ArrayList类型的listOfObjects,其中包含Object类型的对象: public static ArrayList listOfObjects = new ArrayList(); 我们有一个对象构造函数,它创建一个对象,包含两个字段,名称和类型: public Object(String name, int type) { /*some code*/ } 现在我们创建两个对象s,然后将它们添加到对象列表: public static Object obj
ArrayList
类型的listOfObjects
,其中包含Object
类型的对象:
public static ArrayList listOfObjects = new ArrayList();
我们有一个对象
构造函数,它创建一个对象
,包含两个字段,名称和类型:
public Object(String name, int type) { /*some code*/ }
现在我们创建两个对象
s,然后将它们添加到对象列表
:
public static Object object1 = new Object("object one", 1);
public static Object object2 = new Object("object two", 2);
listOfObjects.add(object1);
listOfObjects.add(object2);
假设object1
和object2
已正确添加到listOfObjects
,我们如何访问列表中对象的type
字段
我试过了
listOfObjects.get(1).type;
但这似乎不起作用。有办法做到这一点吗
编辑
对象
是一个示例名称。您需要使用对象.getClass()
您的构造函数公共对象(字符串名称,int类型)
应该将参数分配给公共对象变量。例如:
public class MyObject {
public String name;
public int type;
public MyObject(String name, int type) {
this.name = name;
this.type = type;
}
}
然后调用listoobjects.get(1).type代码>将起作用
编辑:将类从Object
重命名为MyObject
定义一个名为Object
的类是一个非常糟糕的主意,因为已经有一个名为java.lang.Object
的类,而且它位于java.lang
包中,所以所有源代码都会隐式导入它
您需要将字段设置为公共-public int type代码>,如果你想通过这种方式访问它,你可以发布
将字段保留为公共字段也不是一个好主意,因此要将它们的getter公开:
public int getType(){return type;}
首先,使用其他名称作为类名,而不是对象
。虽然你可以使用它,但它只会给讨论增添混乱。(提示:这就是使用foo和bar等元语法变量的原因)
第二,你说“它不起作用”。以什么方式?程序编译吗?它跑吗?你有错误信息吗
最后,请阅读Java泛型,它们现在已经16岁了。如果你是一名学生,你得到的是没有仿制药的藏品,那就教育你的教授(否则你会被敲诈)
最后,重写这一行:
publicstaticarraylistlistofobjects=newarraylist()代码>您的对象类应该是
public class Object {
private String name;
private int type;
public Object(String name, int type) {
this.name = name;
this.type = type;
}
public int getType(){
return type;
}
}
然后您可以通过listOfObjects.get(1.getType())访问
首先将类的名称更改为除对象
之外的其他名称,然后在此类中声明两个字段名称
和类型
,您将在其中存储在构造函数中传递的值,您的代码应如下所示:
public class TestObject {
//The best approach is to declare your fields here as private
private String name;
private int type;
//default non parameterized constructor
public TestObject() {
super();
}
public TestObject(String name, int type) {
this.name = name;
this.type = type;
}
//getters and setters of your fields to make them accessible in public
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
public int getType(){
return this.type;
}
public void setType(int type){
this.type = type;
}
//use getType() getter to get the type field value
listOfObjects.get(1).getType();
要从列表中获取对象类型
,您的调用应如下所示:
public class TestObject {
//The best approach is to declare your fields here as private
private String name;
private int type;
//default non parameterized constructor
public TestObject() {
super();
}
public TestObject(String name, int type) {
this.name = name;
this.type = type;
}
//getters and setters of your fields to make them accessible in public
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
public int getType(){
return this.type;
}
public void setType(int type){
this.type = type;
}
//use getType() getter to get the type field value
listOfObjects.get(1).getType();
对象
类中是否声明了名称
和类型
字段(这对它来说是个坏名称)?如果不是,则应该是。是的,我们假设名称和类型已在对象类中声明。我认为这里的问题是您缺少默认非参数化构造函数的防御,因为如果您有另一个构造函数,则应该定义它,请看我的回答。