mathematische Operationen als Methode und nicht Infix-Operator

Status
Nicht offen für weitere Antworten.

Q-Base

Aktives Mitglied
Hallo *,

die mathematischen Operationen +, -, *, /, %, ... funktionieren ja sehr schön mit dem primitiven Datentypen. Ich würde jedoch gerne die entsprechenden nummerischen Klassen aus java.lang.* benutzen und auf Auto-Boxing verzichten.

Nun gibt es zwar die Klasse java.lang.Math, in der einige mathematischen Operationen vorhanden sind, aber eben nicht Addition, Subtraktion, ... etc.

Suche ich nur in der falschen Klasse oder ist dem wirklich so, dass ich die Infix-Operatoren nicht ersetzen kann?

Ciao, Q
 

Noctarius

Top Contributor
OperatorOverloading gibt es in Java offiziell nicht. Mit ein wenig tricksen und einem Eclipse Compiler Mod von mir würde es gehen. Ich würde es aber nicht machen solange es nichts offizielles gibt.
 
S

SlaterB

Gast
selber schreiben:

Java:
public class Test
{
    public static void main(String[] args)
    {
        Integer x = 4;
        Integer y = 5;
        Integer z = add(x, y);
        System.out.println(z);
    }

    public static Integer add(Integer x, Integer y)
    {
        return Integer.valueOf(x.intValue() + y.intValue());
    }
}
 

Wortraum

Bekanntes Mitglied
@SlaterB:
So eine Methode kann man natürlich schreiben, man kann aber nicht den Infix-Operator selbst überladen wie in Ada95 oder C++.
 
S

SlaterB

Gast
man kann auch nicht mit Java zum Mond fliegen,
mir scheint, in der Frage geht es in diesem Fall in die andere Richtung, selbst die wenigen vorhandenen Infix-Operatoren sollen gar nicht mehr genutzt sondern durch Methoden ersetzt werden ;)
 

Q-Base

Aktives Mitglied
Nein, das hat einen ganz anderen Hintergrund.

Es wird in einer Map<String, Serializable> in Form von Name=Wert eine Menge Daten gespeichert. Es sind alles Zahlen unterschiedlichen Formats. Problem: mit den Zahlen soll gerechnet werden.

Die Klasseninformationen sind ja noch vorhanden. Nur mit dem Infix-Operator komme ich so nicht weiter, weil man Serializeables nicht addieren, subtrahieren etc kann.

Java:
		Serializable s1i = new Integer(42);
		Serializable s2l = new Long(42);
		Serializable s3d = new Double(42);
		Serializable s4f = new Float(42);
		
		System.out.println(s1i + " :: " + s1i.getClass());
		System.out.println(s2l + " :: " + s2l.getClass());
		System.out.println(s3d + " :: " + s3d.getClass());
		System.out.println(s4f + " :: " + s4f.getClass());


Leider ist auch Reflections keine große Hilfe. Der folgende Code ist auch nicht so günstig. Er kompiliert nicht durch.

Java:
Long sum = s1i.getClass().cast(s1i) + s2l.getClass().cast(s2l);

Dabei darf man Longs und Integers summieren, die Code below:

Java:
Long sumsum = 42 + 42L;

Ideen?

Ciao, Q
 

0x7F800000

Top Contributor
Die erben aber alle von Number (Number ist auch Serializable). Und bei Number gibt's unter anderem doubleValue(). Double wäre wohl der sinnvollste "umfassendste gemeinsame Format", zumindest solang's um irgendwelchen bürokratisch-wirtschaftlichen kram geht. Also einfach nur in der map deklaration Serializable nach Number abändern.
 

Q-Base

Aktives Mitglied
Die erben aber alle von Number (Number ist auch Serializable). Und bei Number gibt's unter anderem doubleValue(). Double wäre wohl der sinnvollste "umfassendste gemeinsame Format", zumindest solang's um irgendwelchen bürokratisch-wirtschaftlichen kram geht. Also einfach nur in der map deklaration Serializable nach Number abändern.

Es ist richtig, dass man zum Beispiel auch doubleValue() hat, aber was machst du, wenn es eigentlich ein Long ist? Dass in der Menge der Doubles auch alle Elemente aus Long enthalten sind, bestreite ich ja nicht. Nur die Typinformation geht dadurch verloren bzw. frage ich mich dann ernsthaft, warum es dann noch Long und Double etc gibt, wenn man sowieso nur noch mit Number arbeiten sollte. Schließlich ließe sich ja auch so rechnen.

Ciao, Q
 

Q-Base

Aktives Mitglied
Ich habe mir auch schon überlegt, ob ich nicht einfach alle nummerischen Typen spare und einfach Double benutze. Nur ist das die der wahre Weg. Auch den Wert einfach nur abzuschneiden in der Hoffnung, dass es passt, kann irgendwie zu falschen Ergebnissen führen. Schließlich kann man ja auch shortValue() auf einem wirklich großen Wert von Double ausführen. :-(

Ärgerlich an der Stelle ist einfach, dass man über getClass() nur ein Objekt Class<?> zurück bekommt. Mit dem kann man leider nicht vernünftig rechnen. Was aber sehr gut geht:

Java:
		Serializable s1 = 42;
		Serializable s1l = 42L;
		Long longSum = Integer.class.cast(s1) + Long.class.cast(s1l);

Class.class liefert in dem Fall einfach eine statische Klasse. Die kann man dann wunderbar benutzen.

Andere Ideen?

Ciao, Q
 

0x7F800000

Top Contributor
Es ist richtig, dass man zum Beispiel auch doubleValue() hat, aber was machst du, wenn es eigentlich ein Long ist?
beschwer dich bei demjenigen, der dich dazu zwingt, mit unbekannten zahlentypen rumzurechnen, die gar nicht so richtig zusammenpassen. Sollte es tatsächlich um haufen Kohle gehen, dann wäre BigDecimal wohl wirklich die einzige vernünftige Lösung, sonst kriegst du noch stress mit der Mafia.
Dass in der Menge der Doubles auch alle Elemente aus Long enthalten sind, bestreite ich ja nicht.
nein, sind sie nicht. dafür ist long zu beschränkt und double hat zu kleine genauigkeit. Das sind zwei nichtdisjunkte Mengen, aber keine der beiden ist Teilmenge der anderen.
Nur die Typinformation geht dadurch verloren bzw. frage ich mich dann ernsthaft, warum es dann noch Long und Double etc gibt, wenn man sowieso nur noch mit Number arbeiten sollte. Schließlich ließe sich ja auch so rechnen.
Ja, aber nur sehr ungenau. Aber das ist ja kein allgemeines, sondern dein konkretes problem, weil in deinem Fall irgendwas dazu führt, dass die Zahlen in verschiedenen Formaten angeliefert werden....
Es sind alles Zahlen unterschiedlichen Formats. Problem: mit den Zahlen soll gerechnet werden.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kingdako Wie löse ich eine Mathematische Formel mit Arrays und Schleifen? Java Basics - Anfänger-Themen 32
L mit Fakultät mathematische Formel berechnen Java Basics - Anfänger-Themen 5
F Arrays: Mathematische Funktion Java Basics - Anfänger-Themen 19
E Mathematische Aufgabe: Antwort entspricht nicht der Lösung Java Basics - Anfänger-Themen 5
C mathematische Symbole im Kommentar Java Basics - Anfänger-Themen 1
B Anwender soll mathematische Funktion eingeben können, Einfachster Fnktionsplotter Java Basics - Anfänger-Themen 4
J kleiner Fehler im FAQ Parser für mathematische Formeln Java Basics - Anfänger-Themen 5
N mathematische Funktion Java Basics - Anfänger-Themen 29
L Mathematische zeichen Java Basics - Anfänger-Themen 10
D Methoden Mathematische Strukturen in Java umwandeln Java Basics - Anfänger-Themen 10
D Mathematische Rechnung als String Java Basics - Anfänger-Themen 4
T Ausdrucksparser für Mathematische Ausdrücke Java Basics - Anfänger-Themen 15
M Bisektionsverfahren (Mathematische Funktion) Java Basics - Anfänger-Themen 6
data89 Frage zum FAQ-'Parser für mathematische Formeln' Java Basics - Anfänger-Themen 4
M Mathematische Funktion: Ableiten Java Basics - Anfänger-Themen 2
D Mathematische Funktionen Zeichnen Java Basics - Anfänger-Themen 2
B Mathematische Funktionen Java Basics - Anfänger-Themen 3
Spin Kompexe Mathematische Formeln Java Basics - Anfänger-Themen 10
G Mathematische Frage Java Basics - Anfänger-Themen 7
D Unicode für mathematische/statistische Zeichen. Java Basics - Anfänger-Themen 3
S Mathematische Zeichen (z.B. Alpha) ausgeben Java Basics - Anfänger-Themen 2
M Mathematische Funktionen zeichnen. Java Basics - Anfänger-Themen 2
A mathematische Funktionen grafisch darstellen Java Basics - Anfänger-Themen 8
E Das mathematische "!" in Java Java Basics - Anfänger-Themen 5
O mathematische Formel in quellcode Java Basics - Anfänger-Themen 5
B Mathematische funktionen Berechnen und ausgeben lassen?WIE? Java Basics - Anfänger-Themen 2
M mathematische zeichen und schreibweise in java Java Basics - Anfänger-Themen 5
H Frage zu arithmetischen Operationen Java Basics - Anfänger-Themen 20
J Listen Operationen Java Basics - Anfänger-Themen 4
D Algorithmus in Pseudocode mit log2(n) Operationen erstellen Java Basics - Anfänger-Themen 3
Hacer Operationen einfach verketteter Listen Java Basics - Anfänger-Themen 22
S Warum muss ich die operationen mit AffineTransform in umgekehrter Reihenfolge ausfuehren..? Java Basics - Anfänger-Themen 4
B Matrizen Operationen Java Basics - Anfänger-Themen 7
S NaN - Operationen ohne Fehler? Java Basics - Anfänger-Themen 3
B AffineTransform - Reihenfolge der Operationen Java Basics - Anfänger-Themen 3
G Messen von Elementaren Operationen Java Basics - Anfänger-Themen 3
S Liste von möglichen Operationen Java Basics - Anfänger-Themen 2
B genaue Anzahl der Operationen in Schleifen Java Basics - Anfänger-Themen 5
C Operationen auf Bitebene und Verschiebeoperatoren wichtig? Java Basics - Anfänger-Themen 26
Haave Postfix-Rechner: mehrere math. Operationen nacheinander ausführen Java Basics - Anfänger-Themen 8
M Bit/Byte Operationen Java Java Basics - Anfänger-Themen 8
B math. Operationen + Ausgabe Fehler :S Java Basics - Anfänger-Themen 5
K println - Klammern von Operationen Java Basics - Anfänger-Themen 4
O Operationen auf ein Set Java Basics - Anfänger-Themen 3
X Zählen von arithmetischen Operationen und Vergleichsoperationen Java Basics - Anfänger-Themen 7
R Kommandozeile Operationen Java Basics - Anfänger-Themen 3
G Strings Operationen Java Basics - Anfänger-Themen 7
G String-Operationen Java Basics - Anfänger-Themen 6
F Operationen mit Zeichenketten Java Basics - Anfänger-Themen 8
ven000m Aritmethische Operationen Java Basics - Anfänger-Themen 7
S Stack-Operationen Java Basics - Anfänger-Themen 59
T Rekursive Methode Java Basics - Anfänger-Themen 13
Ü Methode soll Quadrat aus der Summer zurückgeben Java Basics - Anfänger-Themen 10
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
Leyla Spezifischte Methode Java Basics - Anfänger-Themen 16
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
M Methode sperren bis ein Kriterium erfüllt wurde Java Basics - Anfänger-Themen 3
D Switch Case Methode aufrufen Java Basics - Anfänger-Themen 3
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
M methode aufrufen ohne parameter Java Basics - Anfänger-Themen 1
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
Say super.methode / super.variable und super(variable) Java Basics - Anfänger-Themen 2
B Wie kann ich folgende Klasse/Methode per Button ausführen? Java Basics - Anfänger-Themen 1
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
L Methoden Eine Methode um zu testen ob es ein Nachbar gibt Java Basics - Anfänger-Themen 10
til237 Iterative Methode in rekursive Methode umschreiben Java Basics - Anfänger-Themen 4
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
D next() Methode mehrfach verwenden Java Basics - Anfänger-Themen 1
Ostkreuz Methoden Von Dezimal zu Hexadezimal Methode toHex Java Basics - Anfänger-Themen 2
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
N Throw an Main Methode übergeben Java Basics - Anfänger-Themen 7
M Methoden Methode 'wiederhole' nicht gefunden (Uebersetzungsfehler) Java Basics - Anfänger-Themen 1
H Zu langen String aufteilen - bequeme Methode? Java Basics - Anfänger-Themen 14
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
M Anzahl Kommandozeilenparamter mittels Methode Java Basics - Anfänger-Themen 11
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
J Die statische Main-Methode ändert Instanzvariable? Java Basics - Anfänger-Themen 10
D Methode aus dem Aufrufer aufrufen Java Basics - Anfänger-Themen 1
T IOStreams read(byte[]b) methode Java Basics - Anfänger-Themen 2
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
D Warum kann ich hier nicht auf die Methode zugreifen? Java Basics - Anfänger-Themen 5
M generate Methode für Streams Java Basics - Anfänger-Themen 6
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben