在Java中通过基类工厂初始化扩展类

在Java中通过基类工厂初始化扩展类,java,oop,factory,extending-classes,Java,Oop,Factory,Extending Classes,这是我在这里的第一个问题,所以如果出了什么问题,请不要生我的气 问题是: 我们有班级节点。它是类项的基类。所以基本上: public class Item extends Node 好的,一切都很好。但我们也有一个类,我们称之为NodeFactory,它包含静态方法loadnodeasets,结果返回Node public static Node loadNodeAssets (String path) 在我使用的库中,它是初始化节点类并将资源加载到其中的唯一方法。但主要问题是我需要获取I

这是我在这里的第一个问题,所以如果出了什么问题,请不要生我的气

问题是: 我们有班级节点。它是类项的基类。所以基本上:

public class Item extends Node
好的,一切都很好。但我们也有一个类,我们称之为NodeFactory,它包含静态方法loadnodeasets,结果返回Node

 public static Node loadNodeAssets (String path)
在我使用的库中,它是初始化节点类并将资源加载到其中的唯一方法。但主要问题是我需要获取Item类实例,而不是节点。我怎样才能做到呢

 Item f = (Item)NodeFacory.loadNodeAssets ("...")
由于返回类具有类型节点但不具有项,因此不工作。 基本上,我需要构造Fish类并初始化Fish类扩展的节点类中的继承字段。
对不起我的英语。希望你的帮助。谢谢大家!

首先,你应该弄清楚你到底要上哪门课:

Node n = NodeFacory.loadNodeAssets ("...")
System.out.println(n.getClass());
如果它原来是一个
节点
,那么获取
的唯一方法就是手动构造它:

Node n = NodeFacory.loadNodeAssets ("...")
Item i = new Item();
i.setAAA(n.getAAA());
i.setBBB(n.getBBB());
如果库根本不允许您构造
s,那么只有两种可能性:

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

  • 好吧,仅仅因为
    项扩展节点
    ,并不意味着所有
    节点
    都是
    (尽管情况正好相反),所以您无法将
    节点
    自动强制转换为
    (它可能是与
    完全不相似的任何其他对象),您可能需要手动或借助属性映射库复制所需的字段(属性)