是否可以在同一方法中将对象转换为2个不同的事物?

闪光

如果这句话措辞不佳或可搜索,我很抱歉,我在上面找不到任何东西,而且我几乎完全是自学成才。

我有一个Entity类和多个子类,Building并且Creature在这里是相关的。

我有一个setTarget(Entity e)我想同时用于BuildingCreature类的方法,因为在此级别上它们是相同的。

我想知道是否可以将e强制转换为aBuilding或a,Creature取决于它是哪种类型,而不是用相同的代码创建2个整个方法。

private void setTarget(Entity e) {
    if (e.getType.equals("Creature")) {
        Creature c = (Creature)e; //rest of code assumes c is now a creature rather than a building
    }
}

我意识到我可以通过将目标机制放到Entity类中来做到这一点,但是那段代码将与所有其他没有/需要目标的子类无关。

任何帮助或提示将不胜感激,在此先感谢。

编辑:我调查了instanceof,它肯定清理了一下代码,但没有人理解我的意思;

private void setTarget(Entity e) {
    if (e instanceof Creature) {
        Creature c = (Creature)e;
    } else if (e instanceof Building) {
        Building c = (Building)e;
    }
    //Building OR Creature code here ie;
    c.setTarget();
}

这是可以实现的吗?

马洛拉320

您可以使用Java关键字instanceofgetClass()两者之间的区别在于,如果说一个类是SmallBuildingsubclasses BuildingmySmallBuilding instanceof Building则将返回true,而mySmallBuilding.getClass().equals (Building.class)将返回false,因为调用getClass()aSmallBuilding将返回Class与aBuilding不同的对象话虽如此,通常建议instanceof在像您这样的依赖于子类的程序中使用,以及getClass()例如在编写equals()方法时使用(因为两个对象必须属于同一类)。这是一个如何工作的示例:

private void setTarget(Entity e) {
    if (e instanceof Creature) {
        Creature c = (Creature)e;
        // Creature-specific code here
    } else if (e instanceof Building) {
        Building b = (Building)e;
        // Building-specific code here
    }
    // Could add an else for other Entity subclasses (might throw UnsupportedOperationException)
}

编辑:根据您对问题所做的编辑,您可以执行以下操作:

private void setTarget(Entity e) {
    if (e instanceof Creature) {
        Creature c = (Creature)e;
        c.setTarget();
    } else if (e instanceof Building) {
        Building b = (Building)e;
        b.setTarget();
    }
    // Could add an else for other Entity subclasses (might throw UnsupportedOperationException)
}

确实必须setTarget()在两个if语句中都包含另一个选择是为定义一个接口setTarget(),如下所示:

public interface Targetable {
    public void setTarget();
}

然后有BuildingCreature隐含Targetable然后,您可以定义setTarget()为:

private void setTarget(Targetable t) {
    t.setTarget();
}

或者:

private void setTarget(Entity e) {
    if (t instanceof Targetable) {
        ((Targetable)t).setTarget();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用SFINAE创建同一方法的2个不同实现

来自分类Dev

是否可以在同一方法中同时使用GET和POST?

来自分类Dev

是否可以在同一方法中同时使用GET和POST?

来自分类Dev

如何对具有不同参数类型的同一方法的 2 个连续调用进行单元测试

来自分类Dev

子对象和父对象被传递到同一方法

来自分类Dev

在C#5中多次异步调用同一方法是否安全?

来自分类Dev

在Quickbook PHP API中,如何使用enqueue()将对同一方法的多个调用排队

来自分类Dev

在Quickbook PHP API中,如何使用enqueue()将对同一方法的多个调用排队

来自分类Dev

Java:如何将两个事件放在同一方法中

来自分类Dev

同一方法中的两个查询

来自分类Dev

用任一方法将flatMap转换为for-comprehension

来自分类Dev

多个客户端在同一方法中都需要一些不同的功能

来自分类Dev

nameof运算符有什么方法可以访问方法参数(在同一方法之外)?

来自分类Dev

如何使用NSubstitute模拟对同一方法的调用序列以在AutoFixture中返回不同的值?

来自分类Dev

如何忽略Rspec中对具有不同参数的同一方法的某些调用?

来自分类Dev

如何使用Java在同一方法中使用不同的字符串值更新变量?

来自分类Dev

如何使用NSubstitute模拟对同一方法的调用序列以在AutoFixture中返回不同的值?

来自分类Dev

上下文菜单和键盘快捷键在同一方法上返回不同的结果

来自分类Dev

如何在JavaScript中将对象数组转换为一个对象?

来自分类Dev

在F#中将对象映射/转换为另一个

来自分类Dev

如何将对象数组转换为一个对象我可以obj.find()在

来自分类Dev

在Python中将对象从类转换为子类的方法

来自分类Dev

一次调用同一方法多次

来自分类Dev

多次调用同一方法时取消方法调用

来自分类Dev

搜索来自Django模型方法的结果,包括先前对同一方法的调用的结果

来自分类Dev

多次调用同一方法时取消方法调用

来自分类Dev

异步和等待-处理对同一方法的多次调用-互相锁定/等待吗?

来自分类Dev

在同一方法中使用多个等待的效果?

来自分类Dev

执行同一方法消耗的时间少得多

Related 相关文章

  1. 1

    如何使用SFINAE创建同一方法的2个不同实现

  2. 2

    是否可以在同一方法中同时使用GET和POST?

  3. 3

    是否可以在同一方法中同时使用GET和POST?

  4. 4

    如何对具有不同参数类型的同一方法的 2 个连续调用进行单元测试

  5. 5

    子对象和父对象被传递到同一方法

  6. 6

    在C#5中多次异步调用同一方法是否安全?

  7. 7

    在Quickbook PHP API中,如何使用enqueue()将对同一方法的多个调用排队

  8. 8

    在Quickbook PHP API中,如何使用enqueue()将对同一方法的多个调用排队

  9. 9

    Java:如何将两个事件放在同一方法中

  10. 10

    同一方法中的两个查询

  11. 11

    用任一方法将flatMap转换为for-comprehension

  12. 12

    多个客户端在同一方法中都需要一些不同的功能

  13. 13

    nameof运算符有什么方法可以访问方法参数(在同一方法之外)?

  14. 14

    如何使用NSubstitute模拟对同一方法的调用序列以在AutoFixture中返回不同的值?

  15. 15

    如何忽略Rspec中对具有不同参数的同一方法的某些调用?

  16. 16

    如何使用Java在同一方法中使用不同的字符串值更新变量?

  17. 17

    如何使用NSubstitute模拟对同一方法的调用序列以在AutoFixture中返回不同的值?

  18. 18

    上下文菜单和键盘快捷键在同一方法上返回不同的结果

  19. 19

    如何在JavaScript中将对象数组转换为一个对象?

  20. 20

    在F#中将对象映射/转换为另一个

  21. 21

    如何将对象数组转换为一个对象我可以obj.find()在

  22. 22

    在Python中将对象从类转换为子类的方法

  23. 23

    一次调用同一方法多次

  24. 24

    多次调用同一方法时取消方法调用

  25. 25

    搜索来自Django模型方法的结果,包括先前对同一方法的调用的结果

  26. 26

    多次调用同一方法时取消方法调用

  27. 27

    异步和等待-处理对同一方法的多次调用-互相锁定/等待吗?

  28. 28

    在同一方法中使用多个等待的效果?

  29. 29

    执行同一方法消耗的时间少得多

热门标签

归档