Java generics Parameter begrenzt zu enger vun enger Rei vun Zorten

Gëtt et eng Syntax oder eng Léisung fir e genereschen Typ Parameter zu all [11128899 ze beschränken? ] vun enger Rei vun Aarten?

Ech si mir bewosst datt Dir en Typ kann all vun enger Serie vun Aarte beschränken (dh AN Logik):

public class MyClass<T extends Comparable<T> & Serializable> { } // legal syntax

Gëtt et eng ODER logesch Versioun, dh eppes wéi dat:

public class MyClass<T extends Comparable<T> | Serializable> { } // illegal syntax

Wann et keng Syntax gëtt déi dëst ënnerstëtzt (ech mengen net et ass), ass et eng Contournement oder Approche déi e gutt Muster ass ?

Fir e puer Kontexter kann e Beispill Benotzungsfall sinn:

/** @return true if the obj is either has the same id, or if obj is the same as id */
public <T extends MyClass | String> boolean sameAs(T obj) {
    if (obj instanceof String) return this.id.equals(obj);
    if (obj instanceof MyClass) return this.id.equals(((MyClass)obj).id);
    return false;
}

D'Leit schénge sech un der exakter Semantik vu mengem Method Beispill uewen ze hänken. Probéiere mer dat amplaz:

public class MyWrapper<T extends A | B> {
    // my class can wrap A or B (unrelated classes). Yes I will probably use instanceof
}

EDITÉIERT:
Ech weess am Kompiléierungszäit net wat ech kéint kréien (kommen aus externem Code), also wëll ech vermeiden datt ech konkret Klasse fir all Typ hunn. Och muss ech meng Klass engem auslännesche System ginn, deen meng Klass aberuff. Method,awer deen anere System ka mir Instanze vu verschiddene Klasse ginn, awer eng eng definéiert a bekannte Varietéit.

E puer Leit hunn op Beispill vun "onreiner" kommentéiert. Gutt, eng Léisung ass eng Fabréckmethod ze benotze fir meng konkret Klass ze wielen op Basis vun der Klass vum kommenden Objet, awer dës Fabrikmethod misst Instanz vun benotzen, also bewegt Dir just den Beispill vun op eng aner Plaz - Dir braucht nach ëmmer den Instanz vun .

Oder ass dës Iddi just net ëmmer eng gutt?

14
задан Bohemian 6 July 2011 в 09:46
поделиться