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

时间:2014-12-29 21:46:01

标签: java oop factory extending-classes

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

问题在于: 我们有类Node。它是类Item的基类。所以基本上:

public class Item extends Node

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

 public static Node loadNodeAssets (String path)

在我使用它的库中,只能初始化Node类并将资源加载到它中。但主要问题是我需要获取Item类实例但不需要Node。我怎么能完成它?

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

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

1 个答案:

答案 0 :(得分:2)

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

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());

如果图书馆根本不允许你构建Item,那么只有两种可能:

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