Ein kurzer Rant zu Javas angeblicher Typenstarre und die Methodenüberladung

  • Java
    public MyDialogFragment(List<InputStream> inputStreams) {}
    public MyDialogFragment(List<String> fileNames) {}


    WENN Java so unglaublich typenstarr ist wie jeder behauptet, warum meint es dann, dass List<InputStream> dasselbe sei wie List<String>?
    Weil das Ding zu List<T> umgebaut wird und List<T> mit List<T> identisch ist, fein.


    Und wie baue ich nun Konstruktoren, die unterschiedliche Typen von Listen aufnehmen können?

    Java
    public MyDialogFragment(List<InputStream> inputStreams) {}
    public MyDialogFragment(Collection<String> fileNames) {}


    Unglaublich konsistent und supereinfach zu lesen/verstehen/debuggen – nicht.
    Vor Allem wenn da noch mehrere Optionen hinzu kämen... Ich kann ja noch einmal auf ArrayList<URL> spezialisieren, doch was mach ich bei einer Liste von Ressource-IDs (gut, in einen Stream wandeln) oder File oder URI ?


    Dafür wäre ein MyDialogFragmentWithNames(List<String>) und ein MyDialogFragmentWithStreams(List<InputStream>) die perfekte Lösung.
    Gibbet in Java nur leider nicht. Also was mach ich nu?

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Funktioniert übrerladen vielleicht mit array statt list oder collection? Also String[] oder InputStream[]? Da hasst du mit Arrays.asList(..) schnell wieder eine Liste draus.


    Ansonsten Konstruktor privat und mit static factory methoden arbeiten, ala
    public static MyDialogFragment createFromStreams(..)
    oder so :)

  • Ja, das funktioniert tatsächlich.
    Danke für den Tipp. :)


    Ist nur ein bisschen Herumgewandle, das geht in Ordnung.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!