Re: generics & enums
On 14-8-2006 20:57, josef wrote:
[...]
/*
* Is there a better (faster) way to access the implicitly declared
* static method 'values' (1) for enums (i.e. without reflection)?
*
* (I'm trying to implement a sweet ComboboxModel)
*
*/
[...]
Use Class#getEnumConstants()
<http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Class.html#getEnumConstants()>
Looking at the source code of this method, however, it appears to use
reflection as well, though it caches it's values (so a subsequent calls
of getEnumConstants() return the cached values).
You could apply the same technique. The following example caches the
enum constants immediately in the constructor:
public class A<E extends Enum<E>> {
private final E[] enumConstants;
public A(Class<E> enumType) {
enumConstants = enumType.getEnumConstants();
}
public E get(int ordinal) {
if (ordinal >= 0 && ordinal < size()) {
return enumConstants[ordinal];
} else {
return null;
// OR:
// throw new
IndexOutOfBoundsException(String.valueOf(ordinal));
}
}
public int size() {
return enumConstants.length;
}
public static void main(String[] args) {
A<Thread.State> a = new A<Thread.State>(Thread.State.class);
for (int i = -1; i <= a.size(); i++) {
System.out.println("A.get(" + i + ")=" + a.get(i));
}
}
}
--
Regards,
Roland