簡體   English   中英

Java:獲取通用供應商的返回對象的類類型

[英]Java: Get class type of return object of generic supplier

我們假設給出以下定義:

final Supplier<MyClass> supplier = MyClass::new;

有沒有辦法在沒有實際調用供應商的.get()情況下獲取MyClass.class

為什么? 我必須知道指定的類做出一些邏輯決定。 基於此,我可能需要在MyClass找到另一個具有參數的構造函數,並且我對目標類的唯一知識就是這種類型的供應商。 當然我可以調用.get()並從那里開始,像這樣:

final MyClass obj = supplier.get().getClass().getConstructor(MyParameter.class).newInstance(..);

但在執行我的中間步驟之前使用它可能會導致不必要的對象創建

你可以做下面這樣的事情。 有必要添加Guava作為依賴項。

import java.lang.reflect.Type;
import java.util.function.Supplier;

import com.google.common.reflect.TypeToken;

public abstract class MySupplier<T> implements Supplier<T> {

  private final TypeToken<T> typeToken = new TypeToken<T>(getClass()) { };
  private final Type type = typeToken.getType();

  public Type getType() {
    return type;
  }
}

public class Test {

  public static void main(String[] args) {

    Supplier<String> supplier = new MySupplier<String>() {
      @Override
      public String get() {
        return new String();
      }
    };
    System.out.println(((MySupplier) supplier).getType());
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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