Metoda generyczna - The operator is undefined...

0

Hej,

Chcę napisać metodę i nie wiem dlaczego zmienna result nie przyjmuje zwykłych operatorów arytmetycznych.

public static <T> T multiply(T a, T b){
		
		T result =  a * b; //The operator * is undefined for the argument type T
		
		return result;
		
	}

Co muszę tutaj zmienić?

Pozdrawiam

2
kviatek napisał(a):

Co muszę tutaj zmienić?

Język programowania.
W obecnej Javie nie da się tego w rozsądny sposób zrobić.

Musiałbyś wprowadzić coś w stylu własnego typu Number/arithmetic z operacją multiply.
O! ktoś już miał ten problem:
https://stackoverflow.com/questions/27107043/java-multiply-generic-number-without-changing-its-type

0

Java nie obsługuje przeciążenia operatorów, w związku z czym nie wie co to za metod * dla typu T.

zrób sobie interjes

interface Multiplay<T>{
  T multiplay(T a, T b)
}

i zaimplementuj w swojej klasie tam gdzie będziesz potrzebował

0

Co to w ogóle teraz niby znaczy co napisałeś? Masz jakiś dowolny typ T i wesoło próbujesz wykonać operacje a= b*c która jest TxT->T i logiczne że kompilator protestuje, bo dla większości typów które mogą być podstawione pod T taka operacja nie jest możliwa do wykonania. W Javie zresztą nie można sobie przeładować operatorów więc są one zdefiniowane tylko dla konkretnych kilku klas i nijak nie zadziałają ci z generykami.
A jeśli zrobisz wlasny interfejs ze zwykła metodą to i tak musisz zawęzić T do niego dając <T extends Cośtam>

0

Z tą logicznością, że kompilator protestuje - to jest logiczne dla Javy. Na razie. Kto wie co kiedyś będzie.
Ale inne kompilatory sobie czasem radzą. Taki haskell "łyka jak konik dropsa":

let miul x y = x * y
-- i taki typ wychodzi
miul :: Num a => a -> a -> a
0

Hej,

Dzięki za odpowiedzi.
Dla Was to nie dziwne, dla mnie niestety jeszcze nie, bo 1,5 miesiąca się uczę.

Pozdrawiam

0

Przepraszam, myślałem, że jestem zalogowany.

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