Das ist was ich habe. nun natürlich könnte man noch zwischen variablen einführen und co kg.
Fact ist aber das der Code hässlich ist? Den kann ich doch niemanden zeigen. Gibt es da eine schönere variante?
import java.util.HashSet;
import java.util.Set;
public class ComparableTest
{
public static void main(String[] args)
{
Set<Class<?>> s0 = new HashSet<Class<?>>();
s0.add(Number.class);
Set<Class<?>> s1 = new HashSet<Class<?>>();
s1.add(Integer.class);
System.out.println(isComparable(s0));
System.out.println(isComparable(s1));
}
private static <T> boolean isComparable(Set<Class<? extends T>> set)
{
if (set == null || set.isEmpty())
{
return false;
}
Class<?> element = set.iterator().next();
return Comparable.class.isAssignableFrom(element);
}
}
!?
EDIT: Beachte aber, dass damit in Zweifelsfall nur das ERSTE Element geprüft wird. Ein Set { Integer.class, Number.class } würde als Comparable gelten, obwohl Number nicht comparable ist. Aber natürlich kann man auch
private static <T> boolean isComparable(Set<Class<? extends T>> set)
{
if (set == null || set.isEmpty())
{
return false;
}
for (Class<?> element : set)
{
if (!Comparable.class.isAssignableFrom(element))
{
return false;
}
}
return true;
}
Ich denke ja, dass sich durch eine geeignete Qualifizierung der Sets die “Komparabilität” schon zur Compilezeit sicherstellen lassen müsste -> we need more code
Tatsächlich wäre das in diesem Fall egal. Aber irgendwas will der TO wohl noch mit dem “T” machen (auch wenn sich mir noch nicht ganz erschlossen hat, was, und es (unabhängig davon ;)) schon wegen der erasure vermutlich nicht funktionieren wird…).
Ich kann mir schon Fälle vorstellen, wo man sowas brauchen könnte
Ich sollte mich anmelden, dann könnte ich sowas editieren und hätte keine Doppelposts.
Aber hier ist der gesamte Code: https://github.com/ClaasJG/shoulder/issues/2
Ich habe mal ohne Hintergedanken auf ein Problem verlinkt. :o