Java 捕捉多个对象数组中的特定对象
我创建了一个名为“Object”的类和两个实现类对象的类“Item”和“scannet”(每个项都是对象,每个场景都是对象) 在我的实现过程中,我创建了一个Object类型的数组(我们称之为Java 捕捉多个对象数组中的特定对象,java,arrays,object,Java,Arrays,Object,我创建了一个名为“Object”的类和两个实现类对象的类“Item”和“scannet”(每个项都是对象,每个场景都是对象) 在我的实现过程中,我创建了一个Object类型的数组(我们称之为ObjectArray)-(可以存储项目和场景) 在代码的另一部分中,我需要从ObjectArray捕获一个特定元素,并检查它是否是一个项 我找到了一个解决方案,但它太长(将我添加的每个项添加到另一个仅包含项的数组中,并检查我要捕获的元素是否存在于两个数组中) 但我想他们可能是另一个更好的方式 我创建了一个名
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。谢谢!这回答了你的问题吗?你的工作是分享一个最小的这足以理解真正的问题,不要共享所有代码