1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | import java.util.*; class Main { static int x = 0; static List<? extends Number> foo1() { // we can return any List we want. YAY! switch(x) { case 0: { List<Integer> li=Arrays.asList(1, 2); return li; } case 1: { List<Number> ln=new ArrayList<Number>(); ln.add(1); ln.add(Math.PI); return ln; } case 2: { List<Double> lf=Arrays.asList(1.1, Math.E, Math.PI); return lf; } } return null; } static <T> List<T> foo2() { // we are much more constrained here. // since we have no Ts, we can only return empty lists and null // but we return always a List<T>, where T comes from the caller switch(x) { case -1: return null; default: return new ArrayList<T>(); } } public static void main(String[] args) { for(; x<3; x++) { List<? extends Number> wild=foo1(); List<Integer> ints=Main.<Integer>foo2(); List<Number> nums=Main.<Number>foo2(); // we can insert into ints and nums ints.add(0+x); nums.add(42.0/x); // but not in wild // wild.add(1); System.out.println("x: " + x); System.out.println("wildcards: " + wild); System.out.println("ints: " + ints); System.out.println("nums: " + nums); } } } |
aW1wb3J0IGphdmEudXRpbC4qOwoKY2xhc3MgTWFpbgp7CiAgc3RhdGljIGludCB4ID0gMDsKCiAgc3RhdGljIExpc3Q8PyBleHRlbmRzIE51bWJlcj4gZm9vMSgpIHsKICAgIC8vIHdlIGNhbiByZXR1cm4gYW55IExpc3Qgd2Ugd2FudC4gWUFZIQogICAgc3dpdGNoKHgpIHsKICAgICAgY2FzZSAwOiB7CiAgICAgICAgTGlzdDxJbnRlZ2VyPiBsaT1BcnJheXMuYXNMaXN0KDEsIDIpOwogICAgICAgIHJldHVybiBsaTsKICAgICAgfQogICAgICBjYXNlIDE6IHsKICAgICAgICBMaXN0PE51bWJlcj4gbG49bmV3IEFycmF5TGlzdDxOdW1iZXI+KCk7CiAgICAgICAgbG4uYWRkKDEpOwogICAgICAgIGxuLmFkZChNYXRoLlBJKTsKICAgICAgICByZXR1cm4gbG47CiAgICAgIH0KICAgICAgY2FzZSAyOiB7CiAgICAgICAgTGlzdDxEb3VibGU+IGxmPUFycmF5cy5hc0xpc3QoMS4xLCBNYXRoLkUsIE1hdGguUEkpOwogICAgICAgIHJldHVybiBsZjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBzdGF0aWMgPFQ+IExpc3Q8VD4gZm9vMigpIHsKICAgIC8vIHdlIGFyZSBtdWNoIG1vcmUgY29uc3RyYWluZWQgaGVyZS4KICAgIC8vIHNpbmNlIHdlIGhhdmUgbm8gVHMsIHdlIGNhbiBvbmx5IHJldHVybiBlbXB0eSBsaXN0cyBhbmQgbnVsbAogICAgLy8gYnV0IHdlIHJldHVybiBhbHdheXMgYSBMaXN0PFQ+LCB3aGVyZSBUIGNvbWVzIGZyb20gdGhlIGNhbGxlcgogICAgc3dpdGNoKHgpIHsKICAgICAgY2FzZSAtMToKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gbmV3IEFycmF5TGlzdDxUPigpOwogICAgfQogIH0KCiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgZm9yKDsgeDwzOyB4KyspIHsKICAgIExpc3Q8PyBleHRlbmRzIE51bWJlcj4gd2lsZD1mb28xKCk7CiAgICBMaXN0PEludGVnZXI+IGludHM9TWFpbi48SW50ZWdlcj5mb28yKCk7CiAgICBMaXN0PE51bWJlcj4gbnVtcz1NYWluLjxOdW1iZXI+Zm9vMigpOwoKICAgIC8vIHdlIGNhbiBpbnNlcnQgaW50byBpbnRzIGFuZCBudW1zCiAgICBpbnRzLmFkZCgwK3gpOwogICAgbnVtcy5hZGQoNDIuMC94KTsKCiAgICAvLyBidXQgbm90IGluIHdpbGQKICAgIC8vIHdpbGQuYWRkKDEpOwoKICAgIFN5c3RlbS5vdXQucHJpbnRsbigieDogIiArIHgpOwogICAgU3lzdGVtLm91dC5wcmludGxuKCJ3aWxkY2FyZHM6ICIgKyB3aWxkKTsKICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW50czogIiArIGludHMpOwogICAgU3lzdGVtLm91dC5wcmludGxuKCJudW1zOiAiICsgbnVtcyk7CiAgICB9CiAgfQp9Cg==
-
upload with new input
-
result: Success time: 0.06s memory: 213760 kB returned value: 0
x: 0 wildcards: [1, 2] ints: [0] nums: [Infinity] x: 1 wildcards: [1, 3.141592653589793] ints: [1] nums: [42.0] x: 2 wildcards: [1.1, 2.718281828459045, 3.141592653589793] ints: [2] nums: [21.0]


