2015-08-20 18 views
6

Lassen Sie uns sagen, dass wir eine Klasse, wie folgt:Verwenden von Operatoren mit Objekten in Java

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

Und ich möchte einige Code wie dies in Haupt mit Ergebnissen wie in den Kommentaren schreiben:

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 

Kann ich das über Schnittstellen etc. machen oder kann ich nur Methoden schreiben statt Operatoren?

Vielen Dank im Voraus.

+2

Nein. Das Überladen von Operatoren wird in Java nicht unterstützt. –

+1

Nur Methoden verwenden – SacJn

+0

Danke. Ich wusste nicht, wie wir es nennen: "Operator überladen". Ich werde dann mit C++ gehen. – sdoganay

Antwort

3

Sie einfach nicht zu machen. Sie können einen Bediener nicht überlasten. Sie müssen Methoden schreiben, um diese Operatoren zu unterstützen.

Anstatt Methoden in Zeit zu schreiben, empfehle ich Ihnen, util Methoden zu schreiben.

Für Ex:

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

Sie können sogar vergleichbare Schnittstelle implementieren und Überschreibung compareTo-Methode gibt

0

Java nicht erlaubt nicht Operator (here) Überlastung. Aber Sie können Ihrer Klasse einige Funktionen wie muliply(Time t) hinzufügen und sie manuell schreiben. Um Ihre Klassen zu vergleichen, können Sie die Comparable -Interface integrieren, mit der Sie die benötigte Funktionalität hinzufügen können, um zwei Klassen zu vergleichen.

1

Operatorüberladung wird in Java nicht unterstützt. (Es kann verwirrend sein und funktioniert nicht gut für Referenz-basierte Sprachen: selbst die bescheidene == verursacht eine Menge Verwirrung mit Java-Objektreferenzen).

Für einige der Methoden, die Sie implementieren möchten, ist die idiomatische Möglichkeit in Java, das zu tun, was Sie wollen, Comparable<T> zu implementieren. Dann (1) werden Ihre Methoden konventionell sein und (2) Sie können Instanzen Ihrer Klasse in Sätzen und Baumkarten speichern.

Für andere Operationen, wie die Subtraktion, schreiben Sie eine Funktion . Überlegen Sie genau, was Sie zurückgeben sollten. Sollte es eine Zeit oder eine Zeit sein Intervall? Ich frage auch die Gültigkeit des Hinzufügens von zwei Zeitobjekten.

Verwandte Themen