0

我想知道如何能够contains直接在我的类而不是它的 ArrayList 变量上调用该方法。最好的解释方法是使用下面的代码。

谢谢你的帮助。

public class Chord {
    ArrayList<Note> notes;
    // some more stuff not here
}

cmaj = new Chord("Cmaj");
cnote = new Note("C");

// what I have
cmaj.getNotes().contains(cnote);

// what I would like, is this possible, how?
cmaj.contains(cnote);
4

4 回答 4

8

好吧,您可以自己编写方法:

public class Chord {
    private final List<Note> notes;

    ...

    public boolean contains(Note note) {
        return notes.contains(note);
    }
}
于 2012-06-11T14:15:56.943 回答
7

这是代理方法的典型示例(参见代理模式)。

public class Chord {
    private final List<Note> notes = new ArrayList();

    public boolean contains(Note note) {
      return notes.contains(note);
    }

}

当您使用这种类型的方法时,您应该在将对象交付给客户端之前仔细检查是否设置了引用。如果你不注意你会得到 NullPointerException。并尽量保持一致,如果您决定以这种方式使用包含addremove并且reset也应该实施。然后不再需要吸气剂。

于 2012-06-11T14:16:14.347 回答
4

在 chord 中编写一个 contains() 方法,该方法简单地将调用委托给 arraylist,如下所示:

public class Chord {
    ArrayList<Note> notes;

    public boolean contains(Object o) {
       return notes.contains(o);
    }
}
于 2012-06-11T14:16:17.667 回答
3

添加一个contains封装 arrayList 的方法包含:

public class Chord {
    ArrayList<Note> notes;
    // some more stuff not here

    public boolean contains(Note note){
        return notes.contains(note);
    }
}
于 2012-06-11T14:18:21.797 回答