Apple extends Fruit { } public static class Strawberry extends Fruit { } public static class FujiApple extends Apple { } public static void main(String[] args) { Fruit fruit = new Apple(); } }
Apple extends Fruit { } public static class Strawberry extends Fruit { } public static class FujiApple extends Apple { } public static void main(String[] args) { Fruit fruit = new Apple(); } }
class Juice { } static List<Juice> juice(List<Fruit> fruits) { return fruits .stream() .map(fruit -> fruit.produceJuice()) .collect(Collectors.toList()); } class Apple implements Fruit { @Override public Juice produceJuice() { return new Juice(); } } class Banana implements Fruit { @Override public Juice produceJuice() { return new Juice(); } } public static void main(String[] args) { List<Fruit> fruits = ...; List<Banana> bananas = ...; juice(fruits); juice(bananas); } }
class Juice { } static List<Juice> juice(List<Fruit> fruits) { return fruits .stream() .map(fruit -> fruit.produceJuice()) .collect(Collectors.toList()); } class Apple implements Fruit { @Override public Juice produceJuice() { return new Juice(); } } class Banana implements Fruit { @Override public Juice produceJuice() { return new Juice(); } } public static void main(String[] args) { List<Fruit> fruits = ...; List<Banana> bananas = ...; juice(fruits); juice(bananas); } }
class Juice { } static List<Juice> juice(List<Fruit> fruits) { return fruits .stream() .map(fruit -> fruit.produceJuice()) .collect(Collectors.toList()); } class Apple implements Fruit { @Override public Juice produceJuice() { return new Juice(); } } class Banana implements Fruit { @Override public Juice produceJuice() { return new Juice(); } } public static void main(String[] args) { List<Fruit> fruits = ...; List<Banana> bananas = ...; juice(fruits); juice(bananas); } }
class Juice { } static List<Juice> juice(List<Fruit> fruits) { return fruits .stream() .map(fruit -> fruit.produceJuice()) .collect(Collectors.toList()); } class Apple implements Fruit { @Override public Juice produceJuice() { return new Juice(); } } class Banana implements Fruit { @Override public Juice produceJuice() { return new Juice(); } } public static void main(String[] args) { List<Fruit> fruits = ...; List<Banana> bananas = ...; juice(fruits); juice(bananas); } }
class Juice { } static List<Juice> juice(List<Fruit> fruits) { return fruits .stream() .map(fruit -> fruit.produceJuice()) .collect(Collectors.toList()); } class Apple implements Fruit { @Override public Juice produceJuice() { return new Juice(); } } class Banana implements Fruit { @Override public Juice produceJuice() { return new Juice(); } } public static void main(String[] args) { List<Fruit> fruits = ...; List<Banana> bananas = ...; juice(fruits); juice(bananas); } }
class Juice { } static List<Juice> juice(List<? extends Fruit> fruits) { return fruits .stream() .map(fruit -> fruit.produceJuice()) .collect(Collectors.toList()); } class Apple implements Fruit { @Override public Juice produceJuice() { return new Juice(); } } class Banana implements Fruit { @Override public Juice produceJuice() { return new Juice(); } } public static void main(String[] args) { List<Fruit> fruits = ...; List<Banana> bananas = ...; juice(fruits); juice(bananas); } }
implements Fruit { } class Banana implements Fruit { } public static void main(String[] args) { List<? extends Fruit> fruits = ...; Fruit fruit = fruits.get(9); } }
implements Fruit { } class Banana implements Fruit { } public static void main(String[] args) { List<? extends Fruit> fruits = ...; Fruit fruit = fruits.get(9); } }
implements Fruit { } class Banana implements Fruit { } public static void main(String[] args) { List<? extends Fruit> fruits = new ArrayList<Apple>(); Fruit fruit = fruits.get(9); } }
implements Fruit { } class Banana implements Fruit { } public static void main(String[] args) { List<? Fruit> fruits = new ArrayList<Apple>(); Fruit fruit = fruits.get(9); } }
Apple implements Fruit { } public static class Banana implements Fruit { } public static void main(String[] args) { List<? super Apple> apple = new ArrayList<Apple>(); apple.add(new Apple()); Apple appleGet = apple.get(0); } }
Apple implements Fruit { } public static class Banana implements Fruit { } public static void main(String[] args) { List<? super Apple> apple = new ArrayList<Fruit>(); apple.add(new Apple()); Apple appleGet = apple.get(0); } }
Apple implements Fruit { } public static class Banana implements Fruit { } public static void main(String[] args) { List<? super Apple> apple = new ArrayList<Object>(); apple.add(new Apple()); Apple appleGet = apple.get(0); } }
Apple implements Fruit { } public static class Banana implements Fruit { } public static void main(String[] args) { List<? super Apple> apple = new ArrayList<Object>(); apple.add(new Apple()); Apple appleGet = apple.get(0); } }
Apple implements Fruit { } public static class Banana implements Fruit { } public static void main(String[] args) { List<? super Apple> apple = new ArrayList<Apple>(); apple.add(new Apple()); Apple appleGet = apple.get(0); } }
super E> comparator) { E candidate = src.iterator().next(); for (E e : src) { candidate = comparator.compare(candidate, e) < 0 ? e : candidate ; } return candidate; }
ints) { int sum = 0; for (int i : ints) sum += i; return sum; } public static String sum(List<String> strings) { StringBuffer sum = new StringBuffer(); for (String s : strings) sum.append(s); return sum.toString(); } }
ints) { int sum = 0; for (int i : ints) sum += i; return String.valueof(sum); } public static String sum(List<String> strings) { StringBuffer sum = new StringBuffer(); for (String s : strings) sum.append(s); return sum.toString(); } }
ints) { int sum = 0; for (int i : ints) sum += i; return String.valueof(sum); } public static String sum(List strings) { StringBuffer sum = new StringBuffer(); for (String s : strings) sum.append(s); return sum.toString(); } }
Apple extends Fruit { } public static <T extends Comparable<? super T>> T max(List<T> fruits) { ... } public static void main(String[] args) { List<Apple> apples = ...; max(apples); } } 71 Collections.max