1

カスタム クラス の一連の要素がありますUser。今、このクラスをインスタンス化する方法を理解できません。別のオブジェクトを作成し、そこから EMPTY セットを次のようにプルして試してみました。

Site mySite = new Site(/*some params here*/);
User newUser = new User(/*some other params here*/);
Set<User> users = mySite.getUsers();
users.add(newUser);
mySite.setUsers(users);

しかし、 (空でmySite.usersnullない) なので、もちろん NullPointerException が発生します。

それで、正しい方法は何ですか?私は非常に感謝しており、これが曖昧でないことを願っています!

乾杯、スタッキー

4

4 に答える 4

7

空ではありませんnull。空の変数とSet同じではありません。Setnull

必要に応じnullて、空の新しいものを確認して作成します。Set

Set<User> users = mySite.getUsers();
if (users == null) {
    users = new HashSet<User>();
}
users.add(newUser);
mySite.setUsers(users);

または、必要に応じてmySite.getUsers()メソッドが空を返すようにすることをお勧めします。Set

public Set<User> getUsers() {
    if (users == null) {
        users = new HashSet<User>();
    }
    return users;
}

その後、チェックは必要ありませんnull

于 2013-11-08T15:25:05.790 に答える
5

空のセットへの参照と null 参照には大きな違いがあります。(空の文字列への参照と null 参照には大きな違いがあるように。)

ユーザーがいないときにnull参照ではなく空のセットを返すように、おそらくSiteクラス(またはタイプが何であれ)を変更する必要があるようです。一般に、空のコレクションは null 参照よりも扱いやすく、null 性チェックを常に実行する必要がありません。mySitegetUsers()

于 2013-11-08T15:23:21.583 に答える
1
User newUser = new User(/*some params here*/);
Set<User> users = mySite.getUsers();
//the change here
if(users == null) { user = new HashSet<User>();}

users.add(newUser);
mySite.setUsers(users);

ところで、これは悪い習慣でありmySite.getUsers();、空のリストを作成する動作をします。

于 2013-11-08T15:22:48.673 に答える