[英]Get class constructor by functional interface method signature
我知道我可以使用構造函數引用作為高階方法的參數,如下所示:
collection.stream().map(MyClass::new);
但是我將MyClass
作為變量Class<MyClass> clazz = MyClass.class
。 我可以使用它將構造函數引用傳遞給.map(Function)
方法嗎? 我想做這樣的事情,有辦法嗎?
Class<MyClass> clazz = MyClass.class;
collection.stream().map(clazz.getConstructor())
標准免責聲明:使用反射幾乎總是一個壞主意。
對於標准抽象工廠或類似的,go 要好得多。
但是, MethodHandle
將以最小的開銷(我認為)構造所需的Function
。 如果您每次都查找fn
,那么就會產生開銷。
Function<T, R> fn = (Function<T, R>)
MethodHandleProxies.asInterfaceInstance(
Function.class,
MethodHandles.lookup().findConstructor(clazz,
MethodType.methodType(Void.TYPE, tClass)
)
);
省略了異常處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.