Number.valueOf aplicación () para los genéricos de Java

Wohler:

He estado usando una Collectionde los valores numéricos y han implementado algunas funcionalidades relacionadas (mapeo x-> valores de y, etc). Hasta ahora he hecho uso de los genéricos para permitir que cualquier subclase de Numberen el Collection.

En esta clase en particular sigo corriendo en el problema de que no hay una manera fácil de fundido al genérico. Los métodos habituales, como Double.valueOf()no pueden invocarse porque Numberno proporciona un método de este tipo.

¿Hay una buena manera de evitar esto?

He encontrado este post y el pensamiento que resolverlo, pero no puedo pasar el Class.classparámetro a ella.

public class myList<T extends Number> extends Collection<T> {

  @Override
  public boolean add(T value){
    // this is no problem
  }

  // What I want to do:
  public boolean add(double value){
    return this.add(T.valueOf(value)); 
  }

  // Using the example I found:
  public void add(double value){
    return this.add( (T) Ideone.parse(value, T.class) ); // no such option
  }


}

Gracias por adelantado.

ernest_k:

No hay camino para la myListclase sea capaz de convertir doublea T, ya que Tse desconoce.

Una manera de resolver esto es dejar que la persona que llama proporciona una función que convierte de doublea T. He aquí un ejemplo:

public class myList<T extends Number> implements Collection<T> {

    private DoubleFunction<T> fromDoubleFunction;

    public myList(DoubleFunction<T> function) {
        this.fromDoubleFunction = function;
    }

    public boolean add(double value) {
        return this.add(this.fromDoubleFunction.apply(value));
    }

    //rest of code
}

Que luego se puede utilizar de esta manera:

myList<Integer> intList = new myList(d -> Double.valueOf(d).intValue());

Supongo que te gusta

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