使用==运算符的Java比较接口

使用==运算符的Java比较接口,java,software-design,Java,Software Design,我有一个ViewModel,它从数据库中检索一些对象,另一个类观察它们并将它们放在UI中 为了与数据库交互,我需要更多的信息,所以我最终创建了两个接口,一个更通用,另一个专门用于数据库 公共接口MyObject{ //一些方法。。。 } 公共接口MyObject实体扩展了MyObject{ public int databaseSpecificMethod(); //还有一些。。。 } 现在,ViewModel有一个类型列表MyObjectEntity,提供了插入新对象或修改现有对象的方法 然

我有一个ViewModel,它从数据库中检索一些对象,另一个类观察它们并将它们放在UI中

为了与数据库交互,我需要更多的信息,所以我最终创建了两个接口,一个更通用,另一个专门用于数据库

公共接口MyObject{
//一些方法。。。
}
公共接口MyObject实体扩展了MyObject{
public int databaseSpecificMethod();
//还有一些。。。
}
现在,ViewModel有一个类型列表
MyObjectEntity
,提供了插入新对象或修改现有对象的方法

然后从ViewModel中获取这些对象的类将它们作为
MyObject
,我这样做是为了抽象这些对象来自数据库的事实,这样它们就可能来自任何地方

当UI类将其中一个对象发送到ViewModel时,它将以
MyObject
但是ViewModel需要将其作为
MyObjectEntity
来存储(在修改对象的情况下)

我想到的一个解决方案是将给定的
MyObject
MyObjectEntity
列表进行比较,并使用=进行比较,因为两者实际上应该是同一个实例。(忽略遍历列表的成本)

是否有理由认为这是一种不好的做法,或者这会在将来带来问题?

另一个解决方案可能是将这些对象公开为
MyObjectEntity
,然后忘记所有这些,在这种情况下,我想知道您是否认为抽象没有真正意义,也不需要。(目前检索这些对象的唯一方法是从数据库中)

然后从ViewModel中获取这些对象的类将它们作为MyObject获取,我这样做是为了抽象这些对象来自数据库的事实,这样它们就可能来自任何地方

如果您真的开始设计系统,使对象可以来自任何地方,那么您最好在
MyObject
接口中创建一个通用方法,然后在
MyObjectEntity
中调用
private
databaseSpecificMethod()
覆盖它

在本例中,您将利用多态性()和某种开闭原则

使用公共接口,然后使用
instanceof
以某种方式以不同方式处理该接口的一个子类型,如果最终出现类似情况,可能会导致额外的代码更改

if (obj instanceof Interface1) { // you save into database

} else if (obj instaceof Interface2) { // you save into text file 

} else if .....

能否使用
instanceof
检查它是否是
MyObjectEntity
对象?请看@Progman Well。。。我知道
instanceof
通常是一种代码气味,我宁愿避免它。然而,你让我觉得我的解决方案是一种隐式的
实例,但它并没有真正比较对象的类型,只是如果它是相同的实例或不是任何类型的实例,那么请你的问题包括ViewModel和UI类的详细描述,它们如何使用
MyObject
MyObjectEntity
接口,以及您想做什么。提供某种图表来可视化不同类的访问,如果可能的话,还可以显示您拥有的源代码(类似于。