ArrayList Java Дадатак

Калі ласка, дапамажыце мне, чаму я атрымліваю дзіўны выснова для гэтага кода ніжэй ..... чаму я атрымліваю нуль для GetName ().

<�Моцны> Выснова:

Спіс Праверыў: нуль: 1

public class ListTest
{
public static void main(String args[])
{
    List lst = new java.util.ArrayList();
    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;
}

}
0
Паспрабуйце this.name = імя замест наадварот.
дададзена аўтар devconsole, крыніца

6 адказы

Гэта няправільна:

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

павінна быць

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

як у сетэраў.

4
дададзена
Не, гэта было правільна, нават калі гэта ясней з «гэта»
дададзена аўтар Arnaud Denoyelle, крыніца
Я быў упэўнены, але пасля спробы, вы маеце рацыю, прабачце
дададзена аўтар Arnaud Denoyelle, крыніца
@adenoyelle няма, за выключэннем таго, што хочаце перазапісаць перададзеныя параметры з тымі, ад аб'екта (якія з'яўляюцца нуль). Вы ведаеце пра імя сачэння?
дададзена аўтар Kai, крыніца

ваш канструктар не так, ён павінен быць

public Movie(String name, String genre)
{
    this.name = name;
    this.genre = genre;
}
1
дададзена

Лакальныя зменныя, назва і жанр прысвойваныя на глабальныя імёны зменных аднаго і таго ж імя ў канструктару Movie . Значэнне па змаўчанні Object Тыпы з'яўляецца нулявым таму гэтыя зменныя застаюцца Unassigned. Адкарэктаваная канструктар павінен выглядаць як

public Movie(String name, String genre) {
   this.name = name;
   this.genre = genre;
}
1
дададзена

Вы прызначаеце параметры з дапамогай this.name павінна быць наадварот

public Movie(String name, String genre)
{
    this.name = name;
    this.genre = genre;
}
1
дададзена

Reimeus мае гэта права.

«Гэта» ставіцца да самога класу, так што «this.genre» будзе ставіцца да зменнай класа «жанр».

Дазвольце іх вакол, каб вырашыць гэтую праблему.

0
дададзена

Калі вы пішаце імя = this.name, вы прысвойваеце значэнне this.name да імя. Так што ў вашым выпадку, this.name мае нуль, калі ініцыялізуецца і вы прысвоіўшы яго імя.

Гэта добрая практыка, каб выкарыстоўваць метады атрымання і ўстаноўкі, якія вы напісалі ў вашым Боба. Вы можаце ўсталяваць яго як SetName (імя) замест таго, каб пісаць this.name = імя . І ў рэшце рэшт, выканаць тыя ж дзеянні, хоць.

0
дададзена
Калі гэта добрая практыка, я не люблю яго. У кодзе, дзе гэта зроблена, вы павінны праверыць, дзе сетэр называецца і дзе аб'ект даступны непасрэдна. Гэта рэгулярна робіць мяне з розуму. Таму, на мой погляд, гэта добрая практыка, каб назваць сетэраў і здабытчыкамі толькі звонку аб'екта.
дададзена аўтар Kai, крыніца