java如何通过单例实例方法返回不同的类型
如何在类中返回另一个类实例
我的伪代码是:
class test
{
private test() {}
public static test getInstance()
{
if(Condition)
{
return new otherClass();
}
else
{
return new test();
}
}
}
# 1 楼答案
首先:java中的类以大写字母开头(按惯例)
一般来说,父母明确地建造自己的儿子是一种不好的做法,但你可以做的是让一家工厂为你建造,这样“儿子”就不会由父母建造
工厂可以从外部源(props文件等)加载,也可以在getInstance签名中给出,在这种情况下,它不必是类中的成员
请注意,工厂将必须能够构造您的类,因此它必须是Test的子类或在同一个包中,无论哪种方式,构造函数都必须受到保护,或者您必须提供一个在受保护的
下面的例子显示了两种方法,第一种是逻辑在“测试”类中,另一种是逻辑在工厂中,两者都有各自的优点和缺点,我将使用第一种方法,因为它以一种更“正确”的方式封装逻辑
# 2 楼答案
你的
getInstance()
方法的返回类型必须反映你可以返回的所有类类型的公共类型,也就是说,它将是一个由所有这些类共享的超类型或公共接口例如
因此,在上面的例子中,
Car
和Bus
都来自Vehicle
(Vehicle
可以是超类或接口)。否则,将违反方法返回类型和所返回内容之间的约定。请注意,您可以选择继承层次结构中的任何超级类型——这两种类型都通用的任何类型(如果您返回Object
或类似的简单化类型,那么不强制转换对象就无法有效地处理该对象,这表明您的设计中存在不正确的地方)您的调用代码只需要期望并接收一个^{(而不关心它是)
Car
还是^{有关更多信息,请参见this article。有用的是,它使用了与我上面详述的相同的
Vehicle
抽象