3

所以我正在编写一个我的世界模组,在其中我成功地添加了一把手枪,它与处理光线追踪、声音和 GUI 覆盖等事情的支持类一起工作。虽然手枪工作得很好,但我想添加对其他模组的支持,以使用我的武器类作为基类添加自己的武器。我的问题是如何让我的支持类知道项目类是否实际上是扩展我的武器类的自定义类。基本上我需要知道的是,是否可以将一个类的实例转换为我的武器类,以便使用我的武器的基本数据和函数进行处理(请注意,我得到了一个 Item 类的实例,我的 WeponItem 类扩展了该实例) . 有谁知道这样做的好方法?

4

7 回答 7

4

15.20.2。类型比较运算符 instanceof

if(someObject instanceof SomeClass)

JLS学习,向最好的学习。

于 2013-11-05T13:30:58.283 回答
4
if(object instanceof SomeClass)
于 2013-11-05T13:29:05.560 回答
3

您可以使用instanceof来检查您的类型。

以下示例可能对您有所帮助

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

参考示例。

于 2013-11-05T13:29:48.673 回答
3

instanceOf 应该可以帮助您解决问题。

if(yourObject instanceof OtherClass)

如果您有一个未知类的对象,您还可以在该对象上使用 .getClass() 来找出类。您还可以像这样比较两个对象:

if(yourObject instanceof OtherObject)

您还应该注意其他一些事项:http ://www.javapractices.com/topic/TopicAction.do?Id=31

于 2013-11-05T13:29:51.370 回答
2

您可以检查类是否是基类的实例:

if (objA instanceof baseObj){

// objA is instance of baseObj

}
于 2013-11-05T13:38:04.920 回答
1

你可以这样做

Pistol  pistol  = new Pistol ();

if(pistol instanceof Weapon )
于 2013-11-05T13:31:21.860 回答
1

请注意:您真的不应该那样做。相反,您应该定义一个名为 Weapon 的接口,然后所有武器都必须实现该接口,然后它包含您的程序所需的所有方法。

于 2013-11-05T13:31:25.400 回答