Eine generische Lösung besteht darin, einen neuen Typ einzuführen. Es mag komplizierter sein, aber es hat den Vorteil, für jeden Typ zu arbeiten, der seine eigene Unendlichkeit nicht definiert.
Wenn T
ein Typ , für die lteq
definiert ist, können Sie festlegen , InfiniteOr<T>
mit lteq
etwas wie folgt aus :
class InfiniteOr with type parameter T:
field the_T of type null-or-an-actual-T
isInfinite()
return this.the_T == null
getFinite():
assert(!isInfinite());
return this.the_T
lteq(that)
if that.isInfinite()
return true
if this.isInfinite()
return false
return this.getFinite().lteq(that.getFinite())
Ich überlasse es Ihnen, dies in die exakte Java-Syntax zu übersetzen. Ich hoffe, die Ideen sind klar; aber lassen Sie mich sie trotzdem buchstabieren.
Die Idee ist, einen neuen Typ zu erstellen, der dieselben Werte wie ein bereits vorhandener Typ hat, sowie einen speziellen Wert, der - soweit Sie dies mit öffentlichen Methoden erkennen können - genau so wirkt, wie Sie möchten, dass die Unendlichkeit wirkt, z. B. größer als noch etwas. Ich verwende hier null
die Darstellung der Unendlichkeit, da dies in Java am einfachsten erscheint.
Wenn Sie arithmetische Operationen hinzufügen möchten, entscheiden Sie, was sie tun sollen, und implementieren Sie diese. Es ist wahrscheinlich am einfachsten, wenn Sie zuerst die unendlichen Fälle behandeln und dann die vorhandenen Operationen für endliche Werte des ursprünglichen Typs wiederverwenden.
Es kann ein allgemeines Muster geben oder nicht, ob es vorteilhaft ist, eine Konvention zum Umgang mit Unendlichkeiten auf der linken Seite vor Unendlichkeiten auf der rechten Seite oder umgekehrt anzuwenden. Ich kann es nicht sagen, ohne es auszuprobieren, aber für weniger als oder gleich ( lteq
) denke ich, dass es einfacher ist, zuerst die Unendlichkeit auf der rechten Seite zu betrachten. Ich stelle fest, dass lteq
das nicht kommutativ ist, sondern add
und mul
sind; Vielleicht ist das relevant.
Hinweis: Es ist nicht immer einfach, eine gute Definition für unendliche Werte zu finden. Es dient zum Vergleich, zur Addition und Multiplikation, aber möglicherweise nicht zur Subtraktion. Außerdem wird zwischen unendlichen Kardinal- und Ordnungszahlen unterschieden, auf die Sie möglicherweise achten möchten.