从 ArrayList 访问特定对象字段
Posted
技术标签:
【中文标题】从 ArrayList 访问特定对象字段【英文标题】:Accessing specific object fields from an ArrayList 【发布时间】:2015-07-18 05:45:52 【问题描述】:假设我们创建了一个ArrayList
类型的listOfObjects
,其中包含Object
类型的对象:
public static ArrayList listOfObjects = new ArrayList();
我们有一个Object
构造函数,它创建一个Object
有两个字段,名称和类型:
public Object(String name, int type) /*some code*/
现在我们创建两个Object
s,然后将它们添加到listOfObjects
:
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;
但这似乎不起作用。有没有办法做到这一点?
EDIT Object
是一个示例名称。
【问题讨论】:
name
和 type
字段是否在您的 Object
类中声明(这是一个 bad bad bad 名称)?如果不是应该是。
是的,我们假设名称和类型已在 Object 类中声明。
我认为这里的问题是你错过了default non parameterized constructor
的防御,因为如果你有另一个应该定义它,看看我的回答。
【参考方案1】:
-
定义一个名为
Object
的类是一个非常糟糕的主意,因为已经有一个名为java.lang.Object
的类,并且由于它位于java.lang
包中,因此您的所有源都会隐式导入它。
您需要公开您的字段 - public int type;
,如果您想以您发布的方式访问它。
将字段公开也不是一个好主意,因此请为它们公开 getter:
public int getType() return type;
【讨论】:
【参考方案2】:首先将你的类名改为Object
,然后在这个类中声明两个字段name
和type
,你将在其中存储你在构造函数中传递的值,你的代码应该是这样的:
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;
要从您的列表中获取对象type
,您的调用应该是这样的:
//use getType() getter to get the type field value
listOfObjects.get(1).getType();
【讨论】:
【参考方案3】:你的 Object 类应该是这样的,
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();
联系到
【讨论】:
【参考方案4】:您需要使用Object.getClass()
。
【讨论】:
【参考方案5】:首先,使用除Object
之外的其他名称作为类名。虽然您可以使用它,但它只会给讨论增加混乱。 (提示:这就是使用 foo 和 bar 等元句法变量的原因。
其次,你说“它不起作用”。以什么方式?程序是否编译?它运行吗?你有错误信息吗?
最后,阅读 Java 泛型,他们现在已经 16 岁了。如果您是一名学生,并且您学习了没有泛型的集合,请教育您的教授(否则您会被敲诈)。
最后,重写这一行:
public static ArrayList<Object> listOfObjects = new ArrayList<>();
【讨论】:
【参考方案6】:您的构造函数public Object(String name, int type)
应该将参数分配给公共对象变量。示例:
public class MyObject
public String name;
public int type;
public MyObject(String name, int type)
this.name = name;
this.type = type;
那么调用listOfObjects.get(1).type;
就可以了。
编辑:将类从Object
重命名为MyObject
。
【讨论】:
以上是关于从 ArrayList 访问特定对象字段的主要内容,如果未能解决你的问题,请参考以下文章