java - 将对象添加到通用列表

标签 java list generics

您好,我正在尝试添加具有不同属性设置的相同对象。但是当迭代列表时,它给了我最新添加的设置。

正如您在下面看到的,是我的代码。

List<TestObject> list = new ArrayList<TestObject>();
TestObject  t= new TestObject();
t.setEmail("John1989@gmail.com");
list.add(t);
System.out.println(list.get(0).getEmail());
t.setEmail("The_lawyer99yahoo.com");
list.add(t);
System.out.println(list.get(1).getEmail());

for(TestObject s : list)
{
    System.out.println(s.getEmail());
}

输出:

John1989@gmail.com
The_lawyer99yahoo.com
The_lawyer99yahoo.com
The_lawyer99yahoo.com

我的疑问是为什么 iteretor 给出最新添加的对象设置(电子邮件)但是当我执行此语句时 System.out.println(list.get(0).getEmail()); 它工作正常

为什么for循环不断返回最近添加的对象?

提前致谢。

最佳答案

您不是在创建新对象,而只是更改内存中同一对象的属性。 List 允许您多次添加 Object 的同一个实例,因此它“看起来”就像您添加了多个对象,而实际上,它只是一堆指向同一个对象的元素。使用某种 Set 来代替,你会发现你只有一个对象;)

您需要为每个新条目创建一个 TestObject 的新实例,例如...

List<TestObject> list = new ArrayList<TestObject>();
TestObject  t= new TestObject();
t.setEmail("John1989@gmail.com");
list.add(t);
System.out.println(list.get(0).getEmail());

t= new TestObject();
t.setEmail("The_lawyer99yahoo.com");
list.add(t);
System.out.println(list.get(1).getEmail());

for(TestObject s : list)
{
   System.out.println(s.getEmail());
}

这样,属性就与每个条目的 TestObject 的不同实例相关联

关于java - 将对象添加到通用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31531238/

相关文章:

java - 为什么java程序可以编译但不能运行?

java - 无效的项目 JDK

用于设置默认 AWS 客户端的 Java 泛型

c++ - 处理列表时应该使用指针吗?

python - 如何在适当的位置反转列表中的子列表?

python - 如何在 Django 列表中排序

java - JPA 命名查询

c# 另一个泛型的泛型类

generics - 如何将外部关联类型强制为我的本地结构类型?

Python:列表超出范围