Java 捕捉多个对象数组中的特定对象

Java 捕捉多个对象数组中的特定对象,java,arrays,object,Java,Arrays,Object,我创建了一个名为“Object”的类和两个实现类对象的类“Item”和“scannet”(每个项都是对象,每个场景都是对象) 在我的实现过程中,我创建了一个Object类型的数组(我们称之为ObjectArray)-(可以存储项目和场景) 在代码的另一部分中,我需要从ObjectArray捕获一个特定元素,并检查它是否是一个项 我找到了一个解决方案,但它太长(将我添加的每个项添加到另一个仅包含项的数组中,并检查我要捕获的元素是否存在于两个数组中) 但我想他们可能是另一个更好的方式 我创建了一个名

我创建了一个名为“Object”的类和两个实现类对象的类“Item”和“scannet”(每个项都是对象,每个场景都是对象)

在我的实现过程中,我创建了一个Object类型的数组(我们称之为
ObjectArray
)-(可以存储项目和场景)

在代码的另一部分中,我需要从
ObjectArray
捕获一个特定元素,并检查它是否是一个项

我找到了一个解决方案,但它太长(将我添加的每个项添加到另一个仅包含项的数组中,并检查我要捕获的元素是否存在于两个数组中)

但我想他们可能是另一个更好的方式

我创建了一个名为“对象”的类和两个名为“项目”和“风景”的类 实现类对象(每个项都是对象,每个 风景是一个物体)

在Java中,每个对象都是
对象
的实例,因此不需要显式地创建
场景
子类型。另外,
Object
它是一个类,所以我们用抽象类型来表示
implement
,比如
接口
扩展
,用于具体元素

要确定对象的类型,可以使用
instanceof

Object[] myObj = {new Item(),new Item(), new Scenary()};

for (Object s : myObj)
     if (s instanceof Item)
        System.out.println(s.getClass() + " It's an item!");
请注意,
instanceof
在子类型中也返回true。因此,假设将来您将使用另一个类扩展
类,我们称之为
子项
。如果对象数组包含一些
子项
实例,则调用
子项
实例将返回true。因此,如果您想要精确地确定它是否是正确的类对象,您需要一个更严格的检查,就像
s.getClass()==Item.class

Object[] myObj = {new Item(), new Scenary(), new SubItem(),new SubItem()};

for (Object s : myObj)
     if (s.getClass() == Item.class)
        System.out.println(s.getClass() + " It's an Item!"); 
在此最新方案中,只有当
s
实际上是
项而不是
子项时,此检查才会返回true。
由于最新的一点是不使用对象,所以始终使用抽象类或接口来聚合更多类型。如果你继续学习,你就会明白为什么。因此,我要说的是创建一个接口,例如
Shop
,让
项目
场景
最终
子项目
实现它。请注意,使用此方法,这三种类型都是
Shop
类型的子类型,因此与
Shop
相比,每个
项目和
子项目的
实例将返回true。

总结:
instanceof
对于运行时检查非常有用,因为您具有抽象类型,并且无法静态确定对象的真实性质。(设想将一个实例化的
项目
分配给它的
商店
,例如
商店obj=new Item()
。你会注意到这个作业是合法的。

请分享你尝试的代码,这会更容易理解。不要调用类
对象,这个类已经存在并且是所有类的超类。有帮助吗?@Kulfy你的评论回答了我的qst。谢谢!这回答了你的问题吗?你的工作是分享一个最小的这足以理解真正的问题,不要共享所有代码