Skip to content

Instantly share code, notes, and snippets.

@alexengrig
Last active June 24, 2020 20:43
Show Gist options
  • Save alexengrig/9e77f8d12090a782530825e658210235 to your computer and use it in GitHub Desktop.
Save alexengrig/9e77f8d12090a782530825e658210235 to your computer and use it in GitHub Desktop.
PECS (Producer Extends Consumer Super) - Java generic wildcards
public class PECS {
public static void main(String[] args) {
// PECS (Producer Extends Consumer Super)
// Consumer
List<? super Number> consumerNumbers = new ArrayList<>();
consumerNumbers.add(Byte.valueOf((byte) 1));
consumerNumbers.add(Short.valueOf((short) 1));
consumerNumbers.add(Integer.valueOf((int) 1));
consumerNumbers.add(Long.valueOf((long) 1));
consumerNumbers.add(Float.valueOf((float) 1));
consumerNumbers.add(Double.valueOf((double) 1));
Object firstNumber = consumerNumbers.get(0);
// but it doesn't work below
// Number firstNumber = consumerNumbers.get(0);
// Incompatible types.
// Required: java.lang.Number
// Found: capture<? super java.lang.Number>
// Producer
List<? extends Number> producerNumbers = Arrays.asList(1, 2, 3);
Number number = producerNumbers.get(0);
// but it doesn't work below
// producerNumbers.add(Byte.valueOf((byte) 1));
// add (capture<? extends java.lang.Number>) in List cannot be applied
// to (java.lang.Byte)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment