私は次のクラス構造を持っています:
abstract class Role;
class Employee extends Role;
class Student extends Role;
class Employer extends Role;
また、受け入れ可能な役割を格納する列挙型もあります。
public enum RoleEnum
{
EMPLOYEE ("Employee", Employee.class),
STUDENT ("Student", Student.class),
EMPLOYER ("Employer", Employer.class);
final private String name;
final private Class<? extends Role> pRoleClass;
private RoleEnum(final String name, final Class<? extends Role> pRoleClass)
{
this.name = name;
this.pRoleClass = pRoleClass;
}
}
私が欲しいのはClass<? extends Role>
、RoleEnums のリストから型の要素の配列を取得することです。私は Guava ライブラリの FluentIterable を使用していますFluentIterable.from(list).transform(function).toArray(Class<? extends PartyRole>)
。しかし、私がなんとかしたことは、回避策であり、ちょっとしたハックです。次のようになります。
(Class<R>[]) FluentIterable.from(roles)
.transform(new Function<RoleEnum, Class<R>>()
{
@Override public Class<R> apply(final RoleEnum role)
{
return (Class<R>) role.getRoleClass();
}
})
.toList().toArray(new Class[0]));
どこ
class RoleComboWidget<R extends Role>
メソッドを呼び出すクラスであり、
ImmutableList<RoleEnum> roles;