package p; public class WildcardParam_in { public void foo() { NumberCell<Integer> c1= new NumberCell<Integer>(3); NumberCell<Integer> c1a= NumberCell.createNumberCell(c1); NumberCell<Float> c2= new NumberCell<Float>(3.14F); NumberCell<Float> c2a= NumberCell.createNumberCell(c2); } } class NumberCell<T extends Number> { public static <T extends Number> NumberCell<T> createNumberCell(NumberCell<? extends T> other) { return new NumberCell<T>(other); } T fNum; public NumberCell(T n) { fNum= n; } private /*[*/NumberCell/*]*/(NumberCell<? extends T> other) { fNum= other.fNum; } }