Java反射检查传递的对象是否是相同类型

标签 java reflection

我有一个带有比较方法的类。该方法采用两个对象作为参数。 通过java反射,我能够获取所有私有(private)和 protected 字段,并使用一些奇特的东西检查它们的返回类型并用它们做我想做的事情。

这对我个人来说是有好处的。我知道我想做什么,所以我只是比较两个相同类型的对象,仅此而已。

但是...这被很多人使用...他们有时无法阅读我放在那里的Javadocs和注释以及其他内容,所以我必须检查他们是否正在传递相同类型的对象。例如你有: 汽车a、汽车b、卡车a、卡车b...等等.. 我需要检查两个传递的参数是否实际上是相同的类型以进行比较(汽车与汽车,卡车与卡车..)

所以...我不知道这些东西..我应该使用反射来列出所有字段的大小,然后检查所有字段是否具有相同的名称? 或者有更好的解决方案吗?因为写一些类似如果 fieldsOfA.size 与 fieldOfB.size 相同的东西...然后 for 循环如果它们相同来检查名称看起来有点奇怪..

还有一个问题。 这些对象具有一些其他对象的列表 - 例如汽车具有车轮列表。 您正在将车轮与其他汽车进行比较。 他们的列表中有轮子 1 、轮子 2 、轮子 3 、轮子 4 。 第二辆车有 Wheel1、Wheel 2、WHeel 4 和 WHeel 3 ..

所以对象是相同的,但只是交换了位置..有办法防止这种情况吗?我有一个跟踪代码,存储这些对象中的每个差异。因此,如果它们有不同的位置,它会给我两个变化。轮 3 与其他汽车不同,轮 4 与其他汽车不同。

但他们还是一样...... 我不知道如何通过反射(reflection)解决这个问题......有什么想法吗?

最佳答案

要比较类,只需使用 if(object1.getClass() == object2.getClass())

关于Java反射检查传递的对象是否是相同类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31818410/

相关文章:

java - 无法添加到数组列表

java - 如何在关闭应用程序时停止音乐

scala - 使用 ScalaTest 时出现 java.lang.NoSuchFieldError

java - SnakeYaml 不使用我的二传手

c# - 带有可为空参数的 Type.InvokeMember

c# - 为什么 Java 类不能既是抽象类又是最终类

java - 我必须在应用程序退出时手动关闭 Executor 吗?

java - 如何使用 Java 创建文件夹(使用 Eclipse Kepler?)?

reflection - 有没有办法枚举 vb6 类模块中的所有属性?

java - 如何使用静态方法(不带异常)获取类的名称