让我们想象一下,我有两个类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()。
接口是正确的解决方案吗?如何实现呢?谢谢!
您可以创建一个接口,并让这些类实现此接口。然后从switch可以返回此界面。
public static History getPerson(String p){
switch(p){
case "a":
return new Person1();
default:
return new Person2();
}
}
您想要这样的东西:
$ java Foo a
Person1
$ java Foo b
Person2
$ cat Foo.java
/**
* This is just a container so I can do it all in one class.
*/
public class Foo {
// Static just for packaging purposes
public static class History {
public void printMe() { System.out.println("History"); }
}
// Static just for packaging purposes
public static class Person1 extends History {
public void printMe() { System.out.println("Person1"); }
}
// Static just for packaging purposes
public static class Person2 extends History {
public void printMe() { System.out.println("Person2"); }
}
public static History makePerson(String str) {
History retVal = (str.equals("a")) ? new Person1() : new Person2();
return retVal;
}
public static void main(String[] args) {
History person = makePerson(args[0]);
person.printMe();
}
}
(编辑以进行测试并在比较中正确使用==的.equals intead。)
您可以创建一个接口,并让这些类实现此接口。然后从switch可以返回此界面。
public static History getPerson(String p){
switch(p){
case "a":
return new Person1();
default:
return new Person2();
}
}