列表陣列I具有如下類結構:流利可迭代從包含泛型類
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;
}
}
我要的是從RoleEnums名單得到Class<? extends Role>
類型的元素的數組。我正在使用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;
我不確定在這裏看到一個問題。另外,就它的價值而言,泛型和數組之間基本上的任何交互都需要這樣的hackery。泛型和數組真的不能很好地混合。 –
爲什麼你不會像'返回Collections.stream(RoleEnum.values())。map(enumVal - > enumVal.pRoleClass).toArray(Class <?extends Role> :: new);'在Java 8中代替? – Neil
我們仍然在使用Java 7,希望當我們遷移到Java 8時,使用lambda表達式和Java 8的所有強大工具,事情會更加美好。 –