APIs for Java Developers
Go to APIs for .NET Developers (coming soon)Class NRef
- java.lang.Object
-
- com.javonet.api.keywords.NOut
-
- com.javonet.api.keywords.NRef
-
public class NRef extends NOut
A class that represents .NET ref keyword @see http://msdn.microsoft.com/en-us/library/14akc2c7.aspxThe ref keyword causes an argument to be passed by reference, not by value. The effect of passing by reference is that any change to the parameter
in the method is reflected in the underlying argument variable in the calling method. This value of a reference parameter is always the same as the
underlying argument variable.To use a ref parameter, both the method definition and the calling method must explicitly use the ref keyword, as shown in the following example:
.NET class with method expecting argument passed by reference
class RefExample { public void Method(ref int i) { i = i + 44; } }
Sample usage on JAVA side
To call this method from JAVA using Javonet method argument must be explicitly wrapped with NRef class.
Both primitive types or primitive types arrays and other .NET objects (NObject) or NObject arrays might be passed by reference.
Because Java does not support passing by reference, primitive types must be wrapped in “AtomicReference<?>” class.NObject refEx = Javonet.New("RefExample"); //Wrap Java integer in AtomicReference to allow passing by reference AtomicReference{@literal <}Integer{@literal >} myInt = new AtomicReference{@literal <}Integer{@literal >}(10); refEx.invoke("Method",new NRef(myInt)); System.out.println(myInt.get()); //Output will display number "55" because int passed by reference has been modified within the method body.
An argument that is passed to a ref parameter must be initialized before it is passed. This differs from out parameters, whose arguments do not have to be explicitly initialized before they are passed. For more information, see
NOut
.You can use passing by reference for any JAVA primitive type (String, Integer, Float, Boolean, etc…) and arrays of these objects as well as NObject variables and arrays of NObject.
Passing arguments with ref keyword is supported both for instance and static methods.
- Since:
- 1.2
- Version:
- 1.4hf14
-
Constructor Summary
Constructors Constructor and Description NRef(java.util.concurrent.atomic.AtomicReference<?> argument)
Constructor used to wrap primitive type argument with “ref” keyword.NRef(NEnum argument)
Constructor used to wrap NEnum argument with “ref” keyword.NRef(NObject argument)
Constructor used to wrap NObject argument with “ref” keyword.NRef(NObject[] argument)
Constructor used to wrap NObject array argument with “ref” keyword.
Method Summary
Methods inherited from class com.javonet.api.keywords.NOut
-
Constructor Detail
-
NRef
public NRef(java.util.concurrent.atomic.AtomicReference<?> argument) throws JavonetException
Constructor used to wrap primitive type argument with “ref” keyword.- Parameters:
argument
– AtomicReference instance that wraps argument variable for call with “ref” keyword.- Throws:
JavonetException
– if wrong argument is passed
-
NRef
public NRef(NEnum argument) throws com.javonet.internal.commons.lang.NullArgumentException
Constructor used to wrap NEnum argument with “ref” keyword.- Parameters:
argument
– Argument to be passed to method with “ref” keyword.- Throws:
com.javonet.internal.commons.lang.NullArgumentException
– if wrong argument is passed- Since:
- 1.4hf14
-
NRef
public NRef(NObject argument) throws JavonetException
Constructor used to wrap NObject argument with “ref” keyword.- Parameters:
argument
– Argument to be passed to method with “ref” keyword.- Throws:
JavonetException
– if wrong argument is passed
-
NRef
public NRef(NObject[] argument) throws JavonetException
Constructor used to wrap NObject array argument with “ref” keyword.- Parameters:
argument
– Argument to be passed to method with “ref” keyword.- Throws:
JavonetException
– if wrong argument is passed
-