Moderne IDE's (und deren Compiler) aber auch der Java-Compiler tadeln es wenn man parameterisierte Typen parameterlos nutzt. Pflichtbewusst setzt man dann <?> oder <Object> damit diese Warnung weggeht.
Leider fuehrt das zu allerlei Problemen und Inkompatibilitaeren - wobei mich wundert, dass es diese ueberhaupt gibt. Eigentlich sollte Class, Class<?> und Class<Object> doch relativ gleichbedeutend sein, oder?
Ich habe mal ein Codebeispiel angehaengt, das zeigt, was ich meine. Was ist der beste Weg? Vor allem kommen Funktionen wie a(), b() und c() oft aus externen Libraries, wodurch man dann eingeschraenkt ist was man uebergibt.
Leider fuehrt das zu allerlei Problemen und Inkompatibilitaeren - wobei mich wundert, dass es diese ueberhaupt gibt. Eigentlich sollte Class, Class<?> und Class<Object> doch relativ gleichbedeutend sein, oder?
Ich habe mal ein Codebeispiel angehaengt, das zeigt, was ich meine. Was ist der beste Weg? Vor allem kommen Funktionen wie a(), b() und c() oft aus externen Libraries, wodurch man dann eingeschraenkt ist was man uebergibt.
Java:
import java.util.LinkedHashSet;
public class GenericsProblem {
public static void main(String[] args) {
LinkedHashSet<Class> s1 = new LinkedHashSet<>();
a(s1);
b(s1); // compile error
c(s1); // compile error
LinkedHashSet<Class<Object>> s2 = new LinkedHashSet<>();
a(s2); // compile error
b(s2);
c(s2); // compile error
LinkedHashSet<Class<?>> s3 = new LinkedHashSet<>();
a(s3); // compile error
b(s3); // compile error
c(s3);
}
static void a(Iterable<Class> classes) {}
static void b(Iterable<Class<Object>> classes) {}
static void c(Iterable<Class<?>> classes) {}
}