Problem z metodą (podstawy)

0

Mam polecenie:
Stwórz klasę Kalkulator, która będzie przyjmowała typ generyczny T ograniczony przez Number. Klasa ma posiadać dwa pola
podanego typu oraz konstruktor je inicjujący. Następnie, napisz metodę calculate() wypisującą wartość mnożenia tych dwóch
wartości. Stwórz dwa obiekty klasy Kontener, parametryzując je różnymi typami np. Flaot, Integer. Wywołaj metodę
calculate(), na obu obiektach

W ogóle zaczęłam dobrze to robić? Jak mam zrobić metodę calculate() jeśli nie jestem w stanie pomnożyć pole1 * pole2?
Zrozumiałam to tak, jakby trzeba było nie narzucać typu, a znowu nie wiem jak to zrobić bez wskazania, że to int.

public class Kalkulator <T extends Number> {
    T pole1;
    T pole2;

    Kalkulator (T pole1, T pole2){
        this.pole1 = pole1;
        this.pole2 = pole2;
    }

    public T calculate(){
        return pole1*pole2;
    }

}
0

return this.pole1*this.pole2;?

0

@koszalek-opalek: intelij krzyczy Operator '' cannot be applied to 'T', 'T'*

1

Taki kod się kompiluje:

public class Kalkulator <T extends Number> {
  T pole1;
  T pole2;

  Kalkulator (T pole1, T pole2){
      this.pole1 = pole1;
      this.pole2 = pole2;
  }

  public T calculate(){
      return (T) new BigDecimal(pole1.toString()).multiply(new BigDecimal(pole2.toString()));
  }

}

Aczkolwiek robi kurtyzanę z systemu typów Javy.

0

Wszystkie klasy dziedziczące po Number muszą dostarczyć implementację abstrakcyjnych metod tej klasy, m.in.
java.lang.Number.doubleValue()
czyli rozwiązaniem mogło by być np.
this.pole1.doubleValue()*this.pole2.doubleValue();

Rozwiązanie nie działa dobrze dla operacji na dowolnie wielkich liczbach (Big*), operacji na liczbach całkowitych. Jak rozumiem, jest to zadanie edukacyjne i takie kwestie są ignorowane?

PS Zgodnie z poleceniem metoda ma wypisywać wartość, nie widać tego w kodzie. (swoją drogą bardzo kiepska praktyka)

1 użytkowników online, w tym zalogowanych: 0, gości: 1