我已经创建了一个对象数组列表,
private ArrayList<Object> objects;
我正在一个构造函数中初始化它。
public ObjectManager(Handler handler) {
this.handler = handler;
objects = new ArrayList<>();
}
然后将此arraylist绘制/添加到画布中。
public void renderObjects(Graphics g) {
handler.getObjectManager().addObject(new InstanceOfObject(handler, 1000, 1000, g));
}
方法addobject()将对象添加到arraylist。
public void addObject(Object e) {
objects.add(e);
}
我想稍后用类似的代码行删除这个对象,
public void removeObject(Object e) {
objects.remove(e);
}
然而,我不知道怎么做,因为我不知道如何传递的对象是被删除。我唯一能想到的传入对象的方法是执行以下操作:
handler.getObjectManager().removeObject(new InstanceOfObject(handler, 1000, 1000, g));
我甚至不知道这是否有效,因为它正在删除一个“新”对象。即使是这样,“g”也没有定义。如果我在构造函数中定义它,我必须更改许多不同的东西,这会导致错误(通常是nullpointerexception),但即使这样,我也无法通过传入graphics g参数来调用此方法。
2条答案
按热度按时间f1tvaqid1#
你的问题不清楚,但这可能会有帮助。
这个
List
接口实现者ArrayList
已经提供了remove
方法。你没必要再发明它。对象引用
要删除对象,请保留并传递对特定对象的引用。
索引编号
或者,记住包含要删除的对象的列表的槽(索引)。将从零开始的索引号传递给
remove
方法。mgdq6dx12#
实际上,您可以在web上找到java的源代码(如https://github.com/adoptopenjdk/openjdk-jdk11/blob/master/src/java.base/share/classes/java/util/arraylist.java#l644),甚至作为jdk本身中的src.zip。所以这就是
remove()
看起来像:虽然带有标记断点的循环看起来有点深奥,但重要的是
o.equals()
:如果您的“InstanceOfObject
“类实现自己的equals()
,您也可以使用新创建的一次性示例进行比较。