MethodHandles.Lookup.FindConstructor(Class, MethodType) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Produce un handle di metodo che crea un oggetto e lo inizializza utilizzando il costruttore del tipo specificato.
[Android.Runtime.Register("findConstructor", "(Ljava/lang/Class;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)]
public Java.Lang.Invoke.MethodHandle FindConstructor (Java.Lang.Class refc, Java.Lang.Invoke.MethodType type);
[<Android.Runtime.Register("findConstructor", "(Ljava/lang/Class;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)>]
member this.FindConstructor : Java.Lang.Class * Java.Lang.Invoke.MethodType -> Java.Lang.Invoke.MethodHandle
Parametri
- refc
- Class
classe o interfaccia a cui si accede al metodo
- type
- MethodType
il tipo del metodo, con l'argomento ricevitore omesso e un tipo restituito void
Restituisce
handle del metodo desiderato
- Attributi
Commenti
Produce un handle di metodo che crea un oggetto e lo inizializza utilizzando il costruttore del tipo specificato. I tipi di parametro dell'handle di metodo saranno quelli del costruttore, mentre il tipo restituito sarà un riferimento alla classe del costruttore. Il costruttore e tutti i relativi tipi di argomento devono essere accessibili all'oggetto di ricerca.
Il tipo richiesto deve avere un tipo restituito .void
Questo comportamento è coerente con il trattamento di JVM dei descrittori di tipi di costruttore.
L'handle del metodo restituito avrà l'arità della variabile MethodHandle#asVarargsCollector se e solo se è impostato il bit del modificatore di arità della variabile del costruttore (0x0080
).
Se viene richiamato l'handle del metodo restituito, la classe del costruttore verrà inizializzata, se non è già stata inizializzata.
<b>Esempio:</b><blockquote>
{@code
import static java.lang.invoke.MethodHandles.*;
import static java.lang.invoke.MethodType.*;
...
MethodHandle MH_newArrayList = publicLookup().findConstructor(
ArrayList.class, methodType(void.class, Collection.class));
Collection orig = Arrays.asList("x", "y");
Collection copy = (ArrayList) MH_newArrayList.invokeExact(orig);
assert(orig != copy);
assertEquals(orig, copy);
// a variable-arity constructor:
MethodHandle MH_newProcessBuilder = publicLookup().findConstructor(
ProcessBuilder.class, methodType(void.class, String[].class));
ProcessBuilder pb = (ProcessBuilder)
MH_newProcessBuilder.invoke("x", "y", "z");
assertEquals("[x, y, z]", pb.command().toString());
}
</blockquote>
Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.