2016-11-27 2 views
1

Всего новичка в кодировке здесь, поэтому, пожалуйста, будьте как можно дружелюбны к новичкам! Например, я недавно узнал о классах и предметах в школе. Кроме того, извините за неправильное именование/замешательство :)Могу ли я использовать объект как переменную метода в java?

У меня было много экземпляров, где я пишу метод, но хочу вернуть из него более одной переменной. Я подумал - «А что, если я сделал класс, содержащий все переменные, с которыми я работаю, а затем вернулся только это экземпляр моего метода

Пример:

public class Mathematics { 
    int number1; 
    int number2; 
} 

public class MyClass { 
    public static void main (String [] args); 


    public static <class?> MyMethod (<class Mathematics?>) 
     //in here, the method works with numbers one and two, and then returns them, like so: 
     return Mathematics; 
    } 
} 

теперь иметь в виду, это? не является ТОЧНО, что я хочу делать, но по существу, я хочу использовать класс как «контейнер переменных», используемый в методе в другом классе. Если это не так, я хотел бы знать что (и, пожалуйста, сохраните его как можно проще :)).

+0

Вы можете принимать и возвращать класс непосредственно, так же как и любой другой тип? – SLaks

+0

Он называется POJO (обычный старый объект Java), и его можно использовать любым способом, с помощью которого вы можете использовать другие примитивы и объекты (int, double, String и т. Д.). Итак, да, создайте POJO, который содержит все ваши данные, которые вы хотите передать методу/возврату из метода. –

+0

«_but хочет вернуть более одной переменной из него» «Они все одного типа, вы также можете вернуть« Array »(или даже« ArrayList'). – Gulllie

ответ

4

Да, ты на правильном пути! Это общий шаблон кодирования для решения именно этой проблемы, как вернуть несколько значений.

public static Mathematics myMethod(int param1, String param2, float param3) { 
    Mathematics result = new Mathematics(); 

    result.number1 = param1 * 2; 
    result.number2 = param2.length(); 

    return result; 
} 

Детали примечания:

  1. Возвращаемый тип Mathematics.
  2. Параметры могут быть любыми. Они не должны быть связаны с классом Mathematics, хотя они могут быть.
  3. Во-первых, создайте новый объект с помощью new Mathematics() и дайте ему произвольное имя.
  4. Затем присвойте каждому полю значение, которое вам подходит.
  5. Наконец, верните эту переменную.

Кроме того, я изменил его с MyMethod на myMethod в соответствии со стандартным соглашением по именованию Java.


Если после этого вы хотите работать с этим объектом в другом методе, этот метод должен принимать Mathematics объект в качестве параметра.

public static void otherMethod(Mathematics values) { 
    System.out.println("number1 is " + values.number1); 
    System.out.println("number2 is " + values.number2); 
} 

Почему этот метод принимает его как параметр, в то время как первый возвращает его? Разница заключается в том, хочет ли метод принять набор значений, или return один. Если он хочет получать значения, ему нужен параметр типа Mathematics. Если он хочет вернуть значения вызывающему абоненту, он должен иметь тип возврата Mathematics.

Другими словами, являются значения ввода или вывода?

Это, кстати, не является взаимоисключающим. Метод может принимать и возвращать объект.Пример:

/** 
* Returns half of the input values. Does not modify the input object. 
* Instead, a new object is returned. 
*/ 
public static Mathematics halfOf(Mathematics input) { 
    Mathematics output = new Mathematics(); 

    output.number1 = input.number1/2; 
    output.number2 = input.number2/2; 

    return output; 
} 

Это может затем быть назван так:

Mathematics values = myMethod(42, "foobar", 3.14); 
Mathematics altered = halfOf(values); 

System.out.println("Half of " + values.param1 + " is " + altered.param1); 
System.out.println("Half of " + values.param2 + " is " + altered.param2); 
+0

** спасибо! ** Знать, это не должно быть невозможно :). Что делать, если мне понадобится снова работать с указанным «результатом» типа «Математика» в другом методе? следующий метод должен быть определен как public static Mathemathics anotherMethod (int result.param1, String result.param2) и т. д.? –

Смежные вопросы