Java: Obtener tipo de clase de objeto de retorno de proveedor genérico

Tobias Würth:

Vamos a suponer que se da la siguiente definición:

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

¿Hay una manera que puedo conseguir MyClass.classsin tener que invocar .get()en el proveedor?

¿Por qué? Tengo que saber la clase especificada que tomar algunas decisiones lógicas. En base a esto, puede ser que necesite para encontrar otro constructor en MyClassel que tiene un parámetro y el único conocimiento que tengo de la clase de destino es un proveedor de este tipo. Por supuesto que podría simplemente invocar .get()e ir de allí, así:

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

Pero el uso de este antes de hacer mis pasos intermedios podría dar lugar a una creación de objetos innecesarios

Diego Marín:

Usted puede hacer algo, como a continuación. Es necesario añadir guayaba como dependencia.

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());
  }
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=205705&siteId=1
Recomendado
Clasificación