簡體   English   中英

通過功能接口方法簽名獲取 class 構造函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM