Возвращать разные типы данных в методе в Java - PullRequest
0 голосов
/ 30 мая 2019

У меня очень глупый вопрос в Java. У меня есть метод main, который в свою очередь вызывает метод, передающий одно строковое значение. Но взамен мне нужно получить 3 строковых значения. Может кто-нибудь помочь, пожалуйста?

В методе main я передаю только одно строковое значение, и оно должно возвращать 3 строки или может быть иногда 2 строки и одно целое.

public static void main(String[] args) {
        List <String> ls= cusmethod("string1");
        ls.get(0); //get string A
}

Private static string cusmethod(String test)
{
    String A = "A"+test;
    String B = "B"+test;
    String C = "C"+test;

    // Need to return all these 3 string to main method.
    return A , B, C;
}

Метод должен вернуть 3 строковых значения основному методу. Посоветуйте, пожалуйста, как этого добиться. Я не уверен, как вернуть эти строки в метод main и как получить эти строки в main

Ответы [ 3 ]

1 голос
/ 30 мая 2019

Попробуйте вернуть список в вашем вспомогательном методе:

private static List<String> cusmethod(String test) {
    List<String> list = new ArrayList<>();
    list.add("A" + test);
    list.add("B" + test);
    list.add("C" + test);

    return list;
}
0 голосов
/ 30 мая 2019

и должно возвращать 3 строки или может быть иногда 2 строки и одна целая

В Java вы можете использовать тип Object для представления любого объекта, например:

public void foo(Object obj){
    if(obj instanceof String){  // obj is a String
        System.out.println("Hello, " + (String) obj);
    }
    else if(obj instanceof Integer) {  // obj is an integer value
        // Integer is an object analog of int, because int is a primitive type
        int my_int = (Integer) obj;  // but we can implicitly convert Integer to int
        System.out.println("I doubled your integer: " + my_int * 2);
    }

}

// somewhere
foo("Steve");  // Hello, Steve
foo(2);  // I doubled your integer: 4

Так что в вашем случае вы можете вернуть Список объектов:

private static List<Object> cusmethod(String test)
{
    List<String> list = new ArrayList<>();
    if(test.equals("return 3 strings")){
        list.add("A" + test);
        list.add("B" + test);
        list.add("C" + test);
    }
    else if(test.equals("return 2 strings and an int")){
        list.add("A" + test);
        list.add("B" + test);
        list.add(12345);
    }
    return list;
}

public static void main(String[] args) {
    List <Object> ls = cusmethod("string1");
    String s = (String) ls.get(0); //get string A
    int x = (Integer) ls.get(2);
}
0 голосов
/ 30 мая 2019

Вы не можете вернуть более одного значения в Java.Вы можете заключить свой результат в класс и вернуть этот класс.

Если вам нужно вернуть n значений того же типа, вы можете создать Список или массиви вернуть это.

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

class String3 {
    private String res1;
    private String res2;
    private String res3;
    public String3(String res1, String res2, String res3) {
        super();
        this.res1 = res1;
        this.res2 = res2;
        this.res3 = res3;
    }
    public String getRes1() {
        return res1;
    }
    public String getRes2() {
        return res2;
    }
    public String getRes3() {
        return res3;
    }
}

Затем вы можете использовать свой пользовательский класс, как этот.

private String3 method(String test) {
    String a = "A"+test;
    String b = "B"+test;
    String c = "C"+test;

    // Need to return all these 3 string to main method.
    return new String3(a, b, c);    
}

Вы можете использовать библиотеку наподобие vavr , чтобы возвратить кортеж .

Tuple3<String, String, String> result = Tuple.of(A, B, C);

Лучший вариант - пересмотреть ваш кодчтобы увидеть, как вы должны это делать в Java.

Вы пытаетесь использовать решение, которое не является идиоматическим в Java, вы должны попытаться увидеть, как декомпозировать вашу проблему в Java идиоматическом способ, не пытаясь применить решение, типичное для других языков, в конечном итоге оно окупится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...