java方法可以返回其他对象吗?

问题描述 投票:-2回答:2

让我们想象一下,我有两个类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()。

接口是正确的解决方案吗?如何实现呢?谢谢!

java interface static
2个回答
0
投票

您可以创建一个接口,并让这些类实现此接口。然后从switch可以返回此界面。

 public static History getPerson(String p){
    switch(p){
        case "a":
            return new Person1();
        default:
            return new Person2();
    }
 }

0
投票

您想要这样的东西:

$ 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。)


0
投票

您可以创建一个接口,并让这些类实现此接口。然后从switch可以返回此界面。

 public static History getPerson(String p){
    switch(p){
        case "a":
            return new Person1();
        default:
            return new Person2();
    }
 }
© www.soinside.com 2019 - 2024. All rights reserved.