【发布时间】:2019-10-30 21:21:24
【问题描述】:
假设我有两个类 Person1 和 Person2,它们实现了接口 History。 我想在 History 接口中有一个静态方法,它根据这样的字符串返回 Person1 或 Person2:
public static Object getPerson(String p){
switch(p){
case "a":
return new Person1();
default:
return new Person2();
}
}
我这里没有任何错误。但是如何在另一个类中使用它,以便从 Person1 或 Person2 获取方法?我试着这样做:
Object env = IEnvironment.getPerson(clientEnv);
但我不能写 env.myMethod() 例如。
界面是正确的解决方案吗?如何做到这一点? 谢谢!
【问题讨论】:
-
该方法永远不会编译,因为它需要一个字符串作为返回类型,而你返回一个 Person1 或一个 Person2
-
是的,由于其他评论者所说,顶部的方法绝对不应该编译。我们可能需要更多关于这个的信息,为什么你想要一个方法能够返回两种不同的类型? Person1 与 Person2 有何不同?请提供minimal reproducible example,以便我们更好地了解您想要做什么。
-
你搜索的可能是工厂模式,有一个类似的帖子here和一个列表(这里)[stackoverflow.com/questions/1673841/…。
-
您可能希望实现factory 设计模式的某个版本,在给定相关参数化的情况下,可以将实现相同接口的不同类提供给调用者。请注意,从 OO 的角度来看,很难想象
Person如何实现History,而且返回String的方法肯定不能返回不同的对象。 -
感谢您尝试将代码简化为最小示例,但做得不好。对于您的第一个 sn-p,您说 “我在这里没有任何错误。” 这是不可能的,然后您写道您尝试了
IEnvironment.getEnvironment(clientEnv)这很奇怪,因为您的方法不是getPersongetEnvironment然后你写了你不能使用env.myMethod()这是另一个不同的方法名称。所以当你创建一个最小的例子时,请保持一致。您的问题目前只是令人困惑。