用同一对象的另一个示例从arraylist中删除对象

6vl6ewon  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(304)

所以我有一个未定义的对象,我想用另一个具有相同值的未定义对象从数组列表中删除它,这样我就可以有一个类来处理我抛出的每个对象,而不必为每个对象类型创建不同的方法。
问题是,尽管对象的内容是相同的,但由于它是另一个示例,所以总体值是不同的。
比如:
味精。trademsg@1d97b82
味精。trademsg@1a3337fb
即使这两个对象具有相同的值,它们也是不同的,并且不会用.equals返回true
所以我的问题是,当一个对象有相同的字段,但我不知道对象类是什么时,如何从数组列表中删除它?
还是有更简单的方法?
代码:

//valueToDelete can be of any type like User, Items, Trade...
public void deleteFromJson(Object valueToDelete, String fileLocation) throws IOException {
        Gson gson = new Gson();
        ArrayList<Object> oldValues = new ArrayList<>();

        //If valueTiDelete is null, the whole content of the file will be deleted
        if (valueToDelete != null) {
            //Get Content out of array and add it to the ArrayList
            for (Object oldValue : updateOldValues(fileLocation)) {
                oldValues.add(gson.fromJson(oldValue.toString(), valueToDelete.getClass()));
            }

            //This does not work, because the objects are 2 different instances but still have all the same fields.
            //How can I remove an object from the array list, when it has the same fields but I don't know what the Object class is?
            oldValues.remove(valueToDelete);
        }

        // Write updated content in file
        Writer writer = new FileWriter(fileLocation);
        gson.toJson(oldValues, writer);

        writer.flush();
        writer.close();
    }
cvxl0en2

cvxl0en21#

要验证两个对象(属于未知类和可变类)所包含的值是否相等,可以
覆盖两者 Object::equals 以及 Object::hashCode 在所有可能进入该列表的类中,或者
使用反射探测对象内部并深入检查是否相等
第二种方法很难做到,如果不小心的话,很容易出错。例如,hibernate这样做是为了完成它的脏检查功能,所以我不会说这是一个不好的实践,但肯定会停留在灰色区域。
旁注:有这样的需求通常意味着需要重新设计模型

相关问题