works:programmer:java:diamond-data-type

Пример работы с ромбами (class Box<T>)

Взято из Java/Generics/Types

class Box<T>
{
  private T value;
 
  public void set(T val)
  {
    this.value = val;
  }
 
  public T get()
  {
    return this.value;
  }
}
 
// Как использовать?
Box<Integer> di = new Box<>();
di.set(400);
System.out.println(di.get());

Что касаемо отдельных функций, то их дефинируют так. Бонусом записался пример как конвертировать инты разных видов, но сразу скажу что так лучше не делать! В таких вариантах можно использовать перегрузку операторов, и решить задачу гораздо проще.

class MyClass {
 
    public static <T extends Number>
    T add(T a, T b)
    throws NumberFormatException
    {
        if (a instanceof Integer) {
            return (T)(Number)(
                ((Number) a).intValue()
                + ((Number) b).intValue()
            );
        }
        else if (a instanceof Long) {
            return (T)(Long)(
                ((Number) a).longValue()
                + ((Number) b).longValue()
            );
        }
        else if (a instanceof Double) {
            return (T)(Number)(
                ((Number) a).doubleValue()
                + ((Number) b).doubleValue()
            );
        }
        else if (a instanceof Float) {
            return (T)(Number)(
                ((Number) a).floatValue()
                + ((Number) b).floatValue()
            );
        }
        throw new NumberFormatException("That type of Number, is not yet supported");
    }
 
    public static void main(String args[]) {
      int x=10;
      int y=25;
      int z = MyClass.<Long>add(
          Long.valueOf(x),
          Long.valueOf(y)).intValue();
      // int z = x + y;
      System.out.println("Sum of x+y = " + z);
    }
}
works/programmer/java/diamond-data-type.txt · Last modified: 2023/04/21 13:33 by Chugreev Eugene