Gibt es eine Möglichkeit der Nachahmung ODER in Java Generics
EDIT: ich änderte ein bisschen die Beispiel immer die Idee:
Wie
<Integer or Float>
..., ohne dass Sie eine gemeinsame Schnittstelle und eine Unterklasse für Integer-und Float implementieren
Falls nicht, so etwas würde vielleicht mehr Sinn ergeben und nützlich sein
<E extends Number> <E = (Integer|Float)>
Wenn ? ist ein wildcard-warum sollten wir nicht dürfen, beschränken bestimmte Arten?
- Warum wollen Sie das tun?
- Sie scheinen, wie Kreide und Käse. Die Anforderung macht keinen Sinn für mich. Strings sind mathematische Entitäten wie Zahlen, geschlossen über bestimmte Vorgänge? Ich dachte nicht.
- Gerade weil String final ist, eine oder-Lösung erforderlich wäre, noch mehr, weil wir es nicht lösen konnte, es mit der alternative, die ich vorschlagen
- Ich denke, es klingt wie Sie ein echtes Objekt und nicht der Sammlung. Es gibt einige Kapselung fehlt hier.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist nicht möglich, und ich sehe kaum einen Wert in es. Verwenden Sie Generika zu beschränken Art, z.B. in Sammlungen. Mit
or
Betreiber Sie wissen so viel über die Art, wie viel Sie wissen über die spezifischen obertyp von beiden, vonObject
in diesem Fall. Also warum nicht einfachObject
?Hypothetisch:
Was ist der Typ von
list.get(0)
? Ist esString
oderNumber
? Aber man kann nicht eine variable von Typ. Es kann nicht seinString
es nichtNumber
- es kann nur...Object
.UPDATE: Seit Sie verändert dein Beispiel in Frage:
warum lässt du nicht einfach sagen:
? Beachten Sie, dass
Zahl
hat Methoden, die es Ihnen ermöglichen, problemlos ExtraktfloatValue()
undintValue()
. Brauchen Sie wirklich den genauen Typ?Beachten Sie, dass Sie kann verwenden
and
Betreiber:- Und das macht Sinn - Sie können mit Variablen von Typ
E
wo entwederSerializable
oderCloseable
benötigt wird. In anderen WortenE
erweitern müssen beideSerializable
undCloseable
. Siehe auch: Java Generics Verwendung Von Platzhaltern Nach Mit Mehreren Klassen.ClassCastException
- und compile-Zeit-Typ-Prüfung war einer der Gründe, enthalten die Generika in den ersten Platz.In sehr extremen Fällen (vor Java 7 ohne
AutoCloseable
), ich wäre gerne in der Lage sein, das zu tun, auch. E. g.Habe würde mir erlaubt zu nennen
E.close()
, egal, was der tatsächliche Typ war. In anderen Worten,E
enthalten würde, die "API-Schnittpunkt" aller gelieferten Arten. In diesem Fall würde es enthaltenclose()
, und alle Methoden vonjava.sql.Wrapper
undjava.lang.Objekt
.Aber leider nicht. Verwenden Sie stattdessen die Methode überladen, z.B.
Oder plain old
instanceof
Oder lösen Sie Ihr design, wie Sie es wahrscheinlich sollten sich nicht überschneiden-APIs für beliebige Typen sowieso
AutoCloseable
so<E extends AutoCloseable>
ist jetzt genug.<E extends Closeable>
?AutoCloseable
, nichtCloseable
(das erstreckt sich auchAutoCloseable
)Sehe ich keine wirkliche Verwendung für ihn... Aber ich glaube ohnehin, die nächsten, die Sie bekommen würde, um es erweitert die gängigen Schnittstellen für die möglichen Implementierungen.