2015-08-20 13 views
6

Diciamo che abbiamo una classe come segue:sull'uso degli operatori con gli oggetti in Java

public class Time{ 
int hour; 
int min; 
Time(int hour,int m){ 
    hour=h; 
    min=m; 
} 
public String toString(){ 
return hour+":"+min; 
} 
} 

e voglio scrivere del codice come questo nel principale con risultati, come nei commenti:

Time t1 = new Time(13,45); 
Time t2= new Time(12,05); 
System.out.println(t1>=t2); // true 
System.out.println(t1<t2); // false 
System.out.println(t1+4); // 17:45 
System.out.println(t1-t2); // 1:40 
System.out.println(t1+t2); // 1:50 (actually 25:50) 
System.out.println(t2++); // 13:05 

Posso farlo tramite interfacce, ecc. O l'unica cosa che posso fare è scrivere metodi invece di usare gli operatori?

Grazie in anticipo.

+2

No. L'overloading dell'operatore non è supportato in Java. –

+1

Utilizzare solo i metodi – SacJn

+0

Grazie. Non sapevo come lo chiamiamo: "sovraccarico dell'operatore". Allora vado con il C++. – sdoganay

risposta

3

semplicemente non si può. Non è possibile sovraccaricare un operatore. È necessario scrivere metodi per supportare tali operatori.

Invece di scrivere metodi in Time, suggerisco di scrivere metodi util.

Per esempio:

System.out.println(TimeUtil.substract(t1,t2)); 
1

È anche possibile implementare l'interfaccia comparabili e override di metodo compareTo ci

0

Java non permette l'overloading degli operatori (here). Ma puoi aggiungere un po 'di funzionalità alla tua classe come muliply(Time t) e scriverlo manualmente. Per confrontare le tue Classi puoi integrare Comparable -Interface che ti consente di aggiungere la Functionallity necessaria per confrontare due Classi.

1

L'overloading dell'operatore non è supportato in Java. (Può essere offuscante e non funziona bene per i linguaggi di riferimento: anche l'umile == causa molta confusione con i riferimenti agli oggetti Java).

Per alcuni dei metodi che si desidera implementare, il modo idiomatico in Java di fare ciò che si desidera è implementare Comparable<T>. Quindi (1) i tuoi metodi saranno convenzionali e (2) sarai in grado di memorizzare istanze della tua classe in set e mappe ad albero.

Per altre operazioni, ad esempio la sottrazione, scrivere una funzione subtract. Pensa attentamente a ciò che dovrebbe tornare. Dovrebbe essere un intervallo di tempo ? Metto in discussione anche la validità dell'aggiunta di due oggetti temporali.

Problemi correlati