【问题标题】:Initialize extended class through base class factory in JavaJava中通过基类工厂初始化扩展类
【发布时间】:2014-12-29 21:46:00
【问题描述】:

这是我的第一个问题,所以如果有问题请不要生我的气。

问题来了: 我们有类节点。它是 Item 类的基类。所以基本上:

public class Item extends Node

好的,一切都很好。但是我们也有一个类,我们称之为 NodeFactory,它包含静态方法 loadNodeAssets 作为结果返回 Node。

 public static Node loadNodeAssets (String path)

在我使用的库中,它是初始化 Node 类并将资产加载到其中的唯一方法。但主要问题是我需要获取 Item 类实例而不是 Node。我怎么能做到呢?

 Item f = (Item)NodeFacory.loadNodeAssets ("...")

由于返回类的类型为 Node 而不是 Item,因此无法正常工作。 基本上我需要构造 Fish 类并初始化 Fish 类扩展的 Node 类中的继承字段。 对不起我的英语不好。希望得到您的帮助。谢谢!

【问题讨论】:

  • 好吧,仅仅因为Item extends Node 并不意味着所有Nodes 都是Items(反之亦然)所以你不能自动将Node 转换为@987654328 @(它可以是任何其他与 Item 完全不同的对象) - 相反,您可能需要手动复制所需的字段(属性)或借助属性映射库

标签: java oop factory extending-classes


【解决方案1】:

首先你应该找出你实际返回的课程:

Node n = NodeFacory.loadNodeAssets ("...")
System.out.println(n.getClass());

如果结果是Node,那么获得Item 的唯一方法就是手动构建它:

Node n = NodeFacory.loadNodeAssets ("...")
Item i = new Item();
i.setAAA(n.getAAA());
i.setBBB(n.getBBB());

如果库根本不允许你构造Items,那么只有两种可能:

  1. 您误解了应该如何使用该库。也许您认为您需要Item,但实际上您只需要Node
  2. 图书馆的设计是假的。在这种情况下,您可能应该寻找替代方案,或者 - 如果您有源代码 - 自己修复它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多