Примерно так:
исх пример:
void changeString(ref String str) {
str = "def";
}
void main() {
String abc = "abc";
changeString(ref abc);
System.out.println(abc); //prints "def"
}
наш пример:
void changeString(out String str) {
str = "def";
}
void main() {
String abc;
changeString(out abc);
System.out.println(abc); //prints "def"
}
ref
илиout
в C #, - это когда я использую такой шаблон, какTryParse()
, когда метод возвращает логический результат, и единственный способ получить из него проанализированное значение - использоватьref
илиout
.Ответы:
Нет, в Java нет чего-то вроде C #
ref
иout
ключевых слов для передачи по ссылке.В Java можно передавать только по значению. Даже ссылки передаются по значению. См. Страницу Джона Скита о передаче параметров в Java для получения более подробной информации.
Для того, чтобы сделать что - то подобное ,
ref
илиout
вам придется обернуть параметры внутри другого объекта и передать эту ссылку на объект в качестве параметра.источник
ref
.Reference parameters need the ref modifier as part of both the declaration and the invocation - that means it's always clear when you're passing something by reference.
yoda.arachsys.com/csharp/parameters.htmlT&
) по значению, да. Но у C # есть своя собственная терминология, и она конкретно не включает такие вещи, как значения типаref T
- с точки зрения C #,ref
это строго модификатор параметра, и говорить о «передаче ссылки по значению» по отношению к нему не имеет смысла. .Прямой ответ: нет
Но вы можете смоделировать ссылку с помощью оберток .
И сделайте следующее:
Вне
И практически любой другой тип, например:
источник
На самом деле, насколько мне известно, в языке Java нет эквивалента ключевого слова ref или out . Однако я только что преобразовал код C # в Java, который использует параметр out и сообщит, что я только что сделал. Вы должны заключить любой объект в класс-оболочку и передать значения, заключенные в экземпляр объекта-оболочки, как показано ниже;
Простой пример использования Wrapper
Вот класс Wrapper ;
А вот и тестовый код;
Пример из реального мира
Метод AC # .NET с использованием параметра out
Здесь есть метод C # .NET, который использует ключевое слово out ;
Эквивалент Java кода C #, использующего параметр out
И Java- эквивалент этого метода с помощью класса-оболочки выглядит следующим образом:
Класс Wrapper
И класс-оболочка, используемый в этом Java-коде, выглядит следующим образом:
источник
Java передает параметры по значению и не имеет механизма, разрешающего передачу по ссылке. Это означает, что всякий раз, когда параметр передается, его значение копируется в кадр стека, обрабатывающий вызов.
Термин « ценность» в том виде, в котором я его здесь использую, требует небольшого пояснения. В Java есть два типа переменных - примитивы и объекты. Значение примитива - это сам примитив, а значение объекта - его ссылка (а не состояние объекта, на который ссылаются). Следовательно, любое изменение значения внутри метода изменит только копию значения в стеке и не будет замечено вызывающим. Например, нет никакого способа реализовать настоящий метод подкачки, который получает две ссылки и меняет местами их (не их содержимое!).
источник
Как и многим другим, мне нужно было преобразовать проект C # в Java. Я не нашел в сети полного решения относительно модификаторов out и ref . Но я смог взять информацию, которую я нашел, и расширить ее, чтобы создать свои собственные классы для выполнения требований. Я хотел провести различие между параметрами ref и out для ясности кода. С указанными ниже классами это возможно. Пусть эта информация сэкономит другим время и силы.
Пример включен в код ниже.
источник
Три решения, не упомянутых официально, явно не упомянуты:
Для пары я бы рекомендовал: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/tuple/Pair.html
источник
В java нет стандартного способа сделать это. Большинство свопов будет выполнено в списке, который упакован в классе. но есть неофициальный способ сделать это:
источник