我正在编写一个Minecraft模组,成功添加了一个手枪,它与许多支持类一起处理光线追踪、声音和GUI叠加等事项。虽然手枪完美运作,但我想添加支持其他模组使用我的武器类作为基础类来添加他们自己的武器。我的问题是如何让我的支持类知道一个物品类是否实际上是扩展了我的武器类的自定义类。基本上,我需要能够判断一个类的实例是否可以强制转换为我的武器类,以便使用我的武器的基础数据和功能进行处理(请注意,我得到的是一个Item类的实例,而我的WeponItem类扩展了它)。有人知道一个好的方法吗?
我正在编写一个Minecraft模组,成功添加了一个手枪,它与许多支持类一起处理光线追踪、声音和GUI叠加等事项。虽然手枪完美运作,但我想添加支持其他模组使用我的武器类作为基础类来添加他们自己的武器。我的问题是如何让我的支持类知道一个物品类是否实际上是扩展了我的武器类的自定义类。基本上,我需要能够判断一个类的实例是否可以强制转换为我的武器类,以便使用我的武器的基础数据和功能进行处理(请注意,我得到的是一个Item类的实例,而我的WeponItem类扩展了它)。有人知道一个好的方法吗?
if(object instanceof SomeClass)
class InstanceofDemo {
public static void main(String[] args) {
Parent obj1 = new Parent();
Parent obj2 = new Child();
System.out.println("obj1 instanceof Parent: "
+ (obj1 instanceof Parent));
System.out.println("obj1 instanceof Child: "
+ (obj1 instanceof Child));
System.out.println("obj1 instanceof MyInterface: "
+ (obj1 instanceof MyInterface));
System.out.println("obj2 instanceof Parent: "
+ (obj2 instanceof Parent));
System.out.println("obj2 instanceof Child: "
+ (obj2 instanceof Child));
System.out.println("obj2 instanceof MyInterface: "
+ (obj2 instanceof MyInterface));
}
}
class Parent {}
class Child extends Parent implements MyInterface {}
interface MyInterface {}
Output:
obj1 instanceof Parent: true
obj1 instanceof Child: false
obj1 instanceof MyInterface: false
obj2 instanceof Parent: true
obj2 instanceof Child: true
obj2 instanceof MyInterface: true
参考文献中的示例。
instanceOf可以帮助您完成这个技巧。
if(yourObject instanceof OtherClass)
如果你有一个未知类的对象,你也可以在该对象上使用.getClass()来找出它的类。你也可以像这样比较两个对象:
if(yourObject instanceof OtherObject)
还有一些其他需要注意的事情:http://www.javapractices.com/topic/TopicAction.do?Id=31
if (objA instanceof baseObj){
// objA is instance of baseObj
}
Pistol pistol = new Pistol ();
if(pistol instanceof Weapon )
仅供参考:你真的不应该那样做。相反,你应该定义一个名为Weapon的接口,所有武器都必须实现该接口,并且包含程序所需的所有方法。
instanceof
检查都可以在一个丰富的对象模型中被强制转换为多态行为,但并不总是情况如此,因为你可能无法完全控制你正在使用/从中工作的继承层次结构。在这些情况下,instanceof
仍然是必要的。 - Ryan Ransford