ArrayList Java加法
请帮我解释为什么我会得到以下代码的奇怪输出。。。。。 为什么getName的值为null 输出: 列表检查:空:1ArrayList Java加法,java,collections,arraylist,Java,Collections,Arraylist,请帮我解释为什么我会得到以下代码的奇怪输出。。。。。 为什么getName的值为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.p
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;
}
}
局部变量、名称和类型被分配给电影构造函数中同名的全局变量名称。对象类型的默认值为null,因此这些变量保持未赋值状态。更正的构造函数应显示为
public Movie(String name, String genre) {
this.name = name;
this.genre = genre;
}
这是错误的:
public Movie(String name, String genre)
{
name = this.name;
genre = this.genre;
}
应该是
public Movie(String name, String genre)
{
this.name = name;
this.genre = genre;
}
就像在setters中一样。您正在使用此名称分配参数。名称应该是另一种方式
public Movie(String name, String genre)
{
this.name = name;
this.genre = genre;
}
您的构造函数是错误的,应该是错误的
public Movie(String name, String genre)
{
this.name = name;
this.genre = genre;
}
莱默斯说得对
this指的是类本身,因此this.genre指的是类变量genre
切换它们以解决问题。当您写入name=this.name时,您将this.name的值分配给name。因此,在您的情况下,this.name在初始化时保持null,并且您正在将其分配给name 使用在bean中编写的getter和setter是一个很好的实践。
您可以将其设置为setNamename,而不是编写此项。name=name。但最终两者都会执行相同的操作。请尝试使用this.name=name,而不是相反的方法。@adenoyelle否,除非您希望用对象中的空参数覆盖传递的参数。你知道名字阴影吗?如果这是个好习惯,我不喜欢。在执行此操作的代码中,您必须检查在哪里调用setter以及在哪里直接访问对象。这经常让我发疯。因此,在我看来,只从对象外部调用setter和getter是一种很好的做法。