X-Received: by 10.176.91.134 with SMTP id y6mr6996746uae.10.1485890647069; Tue, 31 Jan 2017 11:24:07 -0800 (PST) X-Received: by 10.157.36.193 with SMTP id z59mr2086618ota.1.1485890647025; Tue, 31 Jan 2017 11:24:07 -0800 (PST) Path: csiph.com!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder1.iad1.usenetexpress.com!216.166.98.84.MISMATCH!border1.nntp.dca1.giganews.com!nntp.giganews.com!i7no1070146qta.1!news-out.google.com!78ni13700itm.0!nntp.google.com!r185no1668244ita.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: de.comp.lang.java Date: Tue, 31 Jan 2017 11:24:06 -0800 (PST) In-Reply-To: Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=77.185.207.175; posting-account=VmIUsgkAAABUMV5-gaSlvHjNMDcqojz2 NNTP-Posting-Host: 77.185.207.175 References: User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <949e63f2-ccbf-4b18-a201-af098a6df216@googlegroups.com> Subject: Re: Algorithmus zum Finden des speziellsten Super-Typ eines multi-catch From: =?UTF-8?Q?Heiner_K=C3=BCcker?= Injection-Date: Tue, 31 Jan 2017 19:24:07 +0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Lines: 88 Xref: csiph.com de.comp.lang.java:13098 Es schrieb Michael Paap: > Hm, als Erkl=C3=A4rung der Begriffe ko- bzw. kontravariant kann ich das g= rad > nicht so recht empfinden. Zumal man dazu genau genommen eigentlich erst > mal den Bezug der "Varianz" benennen m=C3=BCsste. Ich finde es plausibel. Mit Varianz ist der Typ/Klasse/Interface gemeint. > Normalerweise hat man diese Begriffe ja im Kontext des =C3=9Cberschreiben= s > von Methoden in Subtypen, wobei bzgl. des R=C3=BCckgabetyps nur Kovarianz= mit > dem LSP logisch vereinbar ist, bzgl. der Parametertypen nur > Kontravarianz (die dort niemand ben=C3=B6tigt und die Java auch nicht erl= aubt). R=C3=BCckgabewerte kann man nur Lesen (kovarian). Parameter kann man nur Schreiben (kontravariant). Passt alles. > > Also ist > >=20 > > ? extends X > >=20 > > eine mathematisch verklausulierte Schreibweise f=C3=BCr nur-Lesen sowie > >=20 > > ? super X > >=20 > > eine mathematisch verklausulierte Schreibweise f=C3=BCr nur-Schreiben. >=20 > Das liest man zwar gerne mal, es ist aber mindestens stark verk=C3=BCrzt. > Schau dir in folgendem Beispiel mal an, an welchen Stellen es hier > Compilerfehler gibt, und an welchen nicht. Es sind welche dabei, die > nicht zu deiner "Regel" passen. Weswegen ich die Regel auch nicht mag. ;-= ) >=20 > --------------------------------------------------- > import java.util.*; >=20 > public class WildcardTest { > public static void main(String[] args) { > List liste1 =3D null; > liste1.add(new Object()); > liste1.add(new Tier()); > liste1.add(new Vogel()); > Object o1 =3D liste1.get(0); > Tier t1 =3D liste1.get(0); > Vogel v1 =3D liste1.get(0); >=20 > List liste2 =3D null; > liste2.add(new Object()); > liste2.add(new Tier()); > liste2.add(new Vogel()); > Tier t2 =3D liste2.get(0); > Object o2 =3D liste2.get(0); > Vogel v2 =3D liste2.get(0); >=20 > List liste3 =3D null; > liste3.add(new Object()); > liste3.add(new Tier()); > liste3.add(new Vogel()); > Object o3 =3D liste3.get(0); > Tier t3 =3D liste3.get(0); > Vogel v3 =3D liste3.get(0); > } > } >=20 > class Tier {} >=20 > class Vogel extends Tier {} >=20 > class Amsel extends Vogel {} > --------------------------------------------------- >=20 > Gru=C3=9F, > Michael Die Compiler-Fehler passen, ausser bei Object o* =3D liste*.get(0); Nun ja, ein Object ist eben immer. Gruesse Heiner