import java.util.ArrayList ;
import java.util.Arrays ;
import java.util.List ;
import java.util.Optional ;
public class Main {
List
< Object
> l
= Arrays .
< Object
> asList
( 1 , Optional.
of ( "foo" ) ,
2 , Optional.
of ( "bar" ) ) ; List< Optional<?>> result = filterByClass( l, Optional.class ) ;
}
public static < T> List< T> filterByClass( List<?> list, Class<? extends T> clazz) {
List< T> filtered = new ArrayList<> ( ) ;
if ( clazz.isInstance ( o) ) {
filtered.add ( clazz.cast ( o) ) ;
}
}
return filtered;
}
}
CmltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwppbXBvcnQgamF2YS51dGlsLkFycmF5czsKaW1wb3J0IGphdmEudXRpbC5MaXN0OwppbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOwoKcHVibGljIGNsYXNzIE1haW4gewoKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBUaHJvd2FibGUgewkJCgkJTGlzdDxPYmplY3Q+IGwgPSBBcnJheXMuPE9iamVjdD5hc0xpc3QoMSwgT3B0aW9uYWwub2YoImZvbyIpLCAyLCBPcHRpb25hbC5vZigiYmFyIikpOwoJCUxpc3Q8T3B0aW9uYWw8Pz4+IHJlc3VsdCA9IGZpbHRlckJ5Q2xhc3MobCwgT3B0aW9uYWwuY2xhc3MpOwoJfQkKCQoJcHVibGljIHN0YXRpYyA8VD4gTGlzdDxUPiBmaWx0ZXJCeUNsYXNzKExpc3Q8Pz4gbGlzdCwgQ2xhc3M8PyBleHRlbmRzIFQ+IGNsYXp6KSB7CgkgICAgTGlzdDxUPiBmaWx0ZXJlZCA9IG5ldyBBcnJheUxpc3Q8PigpOwoJICAgIGZvciAoT2JqZWN0IG8gOiBsaXN0KSB7CgkgICAgICAgIGlmIChjbGF6ei5pc0luc3RhbmNlKG8pKSB7CgkgICAgICAgICAgICBmaWx0ZXJlZC5hZGQoY2xhenouY2FzdChvKSk7CgkgICAgICAgIH0KCSAgICB9CgkgICAgcmV0dXJuIGZpbHRlcmVkOwoJfQp9Cg==
compilation info
Main.java:11: error: incompatible types: cannot infer type-variable(s) T
List<Optional<?>> result = filterByClass(l, Optional.class);
^
(argument mismatch; Class<Optional> cannot be converted to Class<? extends Optional<?>>)
where T is a type-variable:
T extends Object declared in method <T>filterByClass(List<?>,Class<? extends T>)
1 error
stdout