从ArrayList

时间:2015-05-07 14:54:51

标签: java object arraylist field

假设我们创建listOfObjects类型ArrayList,其中包含Object类型的对象:

 public static ArrayList listOfObjects = new ArrayList();

我们有一个Object构造函数,它会创建一个Object,其中包含两个字段,名称和类型:

public Object(String name, int type) { /*some code*/ }

现在我们创建两个Object,然后将它们添加到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);

假设object1object2已正确添加到listOfObjects,我们如何访问列表中对象的type字段?

我试过了

listOfObjects.get(1).type;

但这似乎不起作用。有没有办法做到这一点?

编辑 Object是一个示例名称。

6 个答案:

答案 0 :(得分:4)

  1. 定义一个名为Object的类是一个非常糟糕的主意,因为已经有一个名为java.lang.Object的类,因为它在java.lang包中,你的所有来源都隐含地导入它。
  2. 您需要公开您的字段 - public int type;,如果您想以您发布的方式访问它。
  3. 将领域公之于众也不是一个好主意,所以为他们制作公共吸气剂: public int getType() { return type; }

答案 1 :(得分:1)

构造函数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

答案 2 :(得分:1)

你的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();

到达

答案 3 :(得分:0)

您需要使用Object.getClass()

答案 4 :(得分:0)

首先,使用其他名称作为类名而不是Object。虽然你可以使用它,但它只会增加讨论的混乱。 (提示:这就是为什么使用诸如foo和bar之类的metasyntactic变量的原因)。

其次,你说“它不起作用”。以什么方式?程序是否编译?它运行吗?你有错误信息吗?

最后,阅读Java Generics,他们现在已经16岁了。如果你是一名学生,并且你没有普通教学,那么就教育你的教授(或者你被扯掉了)。

最后,重写这一行:

public static ArrayList<Object> listOfObjects = new ArrayList<>();

答案 5 :(得分:0)

首先将您的班级名称改为除Object之外的其他名称,然后在此班级中声明两个字段nametype,您将在其中存储您已通过的值在你的构造函数中,你的代码应该是这样的:

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();