ArrayList Java Addition

时间:2013-05-23 15:22:44

标签: java collections arraylist

请帮助我为什么我的下面代码得到奇怪的输出..... 为什么getName()得到null。

输出

列表检查:null:1

public class ListTest
{
public static void main(String args[])
{
    List<Movie> lst = new java.util.ArrayList<Movie>();
    lst.add(new Movie("move1", "genre1"));
    System.out.println("List Check :" + lst.get(0).getName() + ":"
                    + lst.size());
}
}

class Movie
{
private String name;
private String genre;

public Movie(String name, String genre)
{
    name = this.name;
    genre = this.genre;
}

public String getName()
{
    return name;
}

public void setName(String name)
{
    this.name = name;
}

public String getGenre()
{
    return genre;
}

public void setGenre(String genre)
{
    this.genre = genre;
}

}

6 个答案:

答案 0 :(得分:4)

这是错误的:

public Movie(String name, String genre)
{
    name = this.name;
    genre = this.genre;
}

应该是

public Movie(String name, String genre)
{
    this.name = name;
    this.genre = genre;
}
像在制定者中一样。

答案 1 :(得分:1)

将局部变量namegenre分配给Movie构造函数中同名的全局变量名。 Object类型的默认值为null,因此这些变量保持未分配状态。更正后的构造函数应显示为

public Movie(String name, String genre) {
   this.name = name;
   this.genre = genre;
}

答案 2 :(得分:1)

您使用this.name分配参数应该是其他方式

public Movie(String name, String genre)
{
    this.name = name;
    this.genre = genre;
}

答案 3 :(得分:1)

你的构造函数是错误的,它应该是

public Movie(String name, String genre)
{
    this.name = name;
    this.genre = genre;
}

答案 4 :(得分:0)

Reimeus没错。

“this”指的是类本身,所以“this.genre”会引用类变量“genre”。

切换它们以解决问题。

答案 5 :(得分:0)

当您编写name = this.name时,您将this.name的值赋给name。因此,在您的情况下,this.name在初始化时保持为null,并且您将其分配给名称。

使用您在bean中编写的getter和setter是一个好习惯。 您可以将其设置为setName(name),而不是撰写this.name=name。两者最终都会执行相同的操作。