0

この以下のコードで奇妙な出力が得られる理由を教えてください..... 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;
}

}
4

6 に答える 6

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;
}

セッターのように。

于 2013-05-23T15:24:46.587 に答える
1

ローカル変数namegenreは、 のコンストラクターで同じ名前のグローバル変数名に割り当てられていますMovieObjectタイプのデフォルト値は であるnullため、これらの変数は割り当てられていません。修正されたコンストラクターは次のように表示されます。

public Movie(String name, String genre) {
   this.name = name;
   this.genre = genre;
}
于 2013-05-23T15:24:40.233 に答える
1

this.name を使用してパラメーターを割り当てていますが、逆にする必要があります

public Movie(String name, String genre)
{
    this.name = name;
    this.genre = genre;
}
于 2013-05-23T15:25:11.697 に答える
1

あなたのコンストラクタは間違っています、そうあるべきです

public Movie(String name, String genre)
{
    this.name = name;
    this.genre = genre;
}
于 2013-05-23T15:25:24.757 に答える
0

name = this.name と書くと、this.name の値が name に代入されます。したがって、あなたの場合、 this.name は初期化時に null を保持し、それを name に割り当てています。

Bean に記述したゲッターとセッターを使用することをお勧めします。setName(name)と書く代わりに、のように設定できますthis.name=name。ただし、どちらも最終的には同じアクションを実行します。

于 2013-05-23T15:28:23.520 に答える
0

Reimeusはそれを正しく理解しています。

「this」はクラス自体を参照するため、「this.genre」はクラス変数「genre」を参照します。

問題を解決するには、それらを切り替えます。

于 2013-05-23T15:27:44.583 に答える