die folgenden Klassen gegeben ...Warum kann ich eine Liste eines Typs, der nicht in meiner Liste angegeben ist, zurückgeben? <T> Rückgabetyp?
package whoop.deduper;
/**
* @author deduper
*
*/
public class Foo {
}
package whoop.deduper;
import java.math.BigDecimal;
import java.util.Iterator;
import java.util.List;
/**
* @author deduper
*
*/
public class FuBar {
public int fuBar(){
Bar bar = new Bar();
List<Foo> foos = bar.foos();
int baz = 0;
for (Iterator iterator = foos.iterator(); iterator.hasNext();) {
BigDecimal foo = (BigDecimal) iterator.next();
baz = foo.intValue();
return baz;
}
return baz;
}
}
package whoop.deduper;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @author deduper
*
*/
public class Bar {
public <T extends Foo> List<T> foos() {
List sketchy = new ArrayList();
sketchy.add(BigDecimal.TEN);
return sketchy;
}
}
package whoop.deduper;
import static java.lang.System.out;
/**
* @author deduper
*
*/
public class EffedUp {
/**
* @param args
*/
public static void main(String[ ] args) {
int effedUp = new FuBar().fuBar();
out.println(effedUp + " — But it works!");
}
}
... warum funktioniert das überhaupt? Ich meine, ich hätte irgendwo eine ClassCastException oder sowas erwartet! Warum ist nicht da?
Kann mir bitte jemand eine klar geschriebene Erklärung geben, die dokumentiert, was hier vor sich geht?
Vielen Dank im Voraus.
Sie können wegen dieses Rohtyps 'List sketchy = new ArrayList();'. Auch Ihre IDE sollte Sie über diese Rückkehr in 'Bar # foos' warnen. – Tom