Может ли метод Java вернуть другой объект? - PullRequest
0 голосов
/ 30 октября 2019

Давайте представим, что у меня есть два класса 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 (), например.

Является ли интерфейс правильным решением? Как этого добиться? Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Хотите ли вы что-то вроде этого:

$ 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 голосов
/ 30 октября 2019

Вы можете создать Интерфейс, и пусть эти классы реализуют этот интерфейс. Затем с коммутатора вы можете вернуть этот интерфейс.

 public static History getPerson(String p){
    switch(p){
        case "a":
            return new Person1();
        default:
            return new Person2();
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...