На самом деле, невозможно получить параметры в java, но вы можете сделать работу вокруг того, чтобы метод принял де-ссылку для неизменяемых String и примитивов, написав общий класс, где неизменяемым является общий с значение и setter и getter или с помощью массива, где элемент 0 (1 в длину) - это значение, указанное при первом экземпляре, потому что бывают ситуации, когда вам нужно вернуть более одного значения, когда нужно написать класс, чтобы вернуть их где класс используется только, есть просто пустая трата текста и не может быть повторно использована.
Теперь, будучи C/C++ и также .Net (моно или MS), он убеждает меня, что java не поддерживает по крайней мере де-ссылку для примитивов; поэтому я прибегаю к массиву.
Вот пример. Предположим, вам нужно создать функцию (метод), чтобы проверить, является ли индекс допустимым в массиве, но вы также хотите вернуть длину останова после проверки индекса. Назовем его в c как 'bool validate_index (int index, int arr_len, int & rem)'. Способ сделать это в java будет «Boolean validate_index (int index, int arr_len, int [] rem1)». rem1 просто означает, что массив удерживает 1 элемент.
public static Boolean validate_index(int index, int arr_len, int[] rem1)
{
if (index < 0 || arr_len <= 0) return false;
Boolean retVal = (index >= 0 && index < arr_len);
if (retVal && rem1 != null) rem1[0] = (arr_len - (index + 1));
return retVal;
}
Теперь, если мы используем это, мы можем получить как логическое возвращение, так и остаток.
public static void main(String[] args)
{
int[] ints = int[]{1, 2, 3, 4, 5, 6};
int[] aRem = int[]{-1};
//because we can only scapegoat the de-ref we need to instantiate it first.
Boolean result = validate_index(3, ints.length, aRem);
System.out.println("Validation = " + result.toString());
System.out.println("Remainding elements equals " + aRem[0].toString());
}
ставит: Validation = True ставит: Remainding элементов равно 2
массива элементов всегда либо точку на объект в стеке или адрес объекта в куче. Поэтому использование его в качестве de-ссылок абсолютно возможно даже для массивов, сделав его двойным массивом, создающим его как myArrayPointer = new Class [1] [], затем передавая его, потому что иногда вы не знаете, какая длина массива будет пока вызов не пройдет через такой алгоритм, как «Boolean tryToGetArray (SomeObject o, T [] [] ppArray)», который будет таким же, как в c/C++, как «шаблон bool tryToGetArray (SomeObject * p, T ** ppArray)» или C# 'bool tryToGetArray (SomeObject o, ref T [] array)'. Он работает, и он работает хорошо, пока [] [] или [] создается в памяти сначала с хотя бы одним элементом.
Этот пример неправильный. Java не имеет выходных параметров. – Bombe
@ Bombe: http://www.javapractices.com/topic/TopicAction.do?Id=37 –
@Chathuranga: более подробно рассмотрим пример. Он использует StringBuilder, а не строку! –