项枚举假如我有几个特定的类,所有扩展一个抽象类,像这样:(?相关)创建相关的类
public abstract AbstractClass {
// abstract stuff here
}
public FirstSpecificClass extends AbstractClass {
// specific stuff here
}
public SecondSpecificClass extends AbstractClass {
// specific stuff here
}
我需要在其他地方创建一个enum
,其中每个条目连接与一个特定的类;为此,我将特定类作为构造函数参数传递并将其作为私有字段存储在枚举中(我也为该字段提供了一个getter方法)。我还需要创建一个静态方法,它将某个特定类的实例作为参数并返回适当的枚举元素(或null)。我将通过遍历每个枚举条目并将instanceof
与前面提到的专用字段的getter结合使用来完成此操作。这是我的尝试:
public enum Types {
FIRST(FirstSpecificClass.class), // line 2
SECOND(SecondSpecificClass.class); // line 3
private Class<AbstractClass> classType;
private Types(Class<AbstractClass> classType) {
this.classType = classType;
}
public Class<AbstractClass> getClassType() {
return this.classType;
}
public static Types fromTypeInstance(AbstractClass instance) {
for(Types t : Types.values())
if(instance instanceof t.getClassType()) return t; // line 17
return null;
}
}
我似乎误解了如何将类类型存储为一个字段,以便它可以在instanceof
检查后返回和使用。这个代码是生产几种编译时错误:
- (2枚举的线):构造
Types(Class<FirstSpecificClass>)
未定义 - (枚举的3线):构造
Types(Class<SecondSpecificClass>)
未定义 - (线枚举的)17:数不兼容类型
boolean
和Class<AbstractClass>
我不是通常是一个Java程序员,和我的泛型的理解和instanceof
是模糊的最好的,虽然我有一个公关etty公司把握OOP的概念。我如何解决这些错误并达到预期效果?
aha!谢谢!这解决了构造函数中的类型不兼容问题。我仍然在'instanceof'检查中得到一个错误,因为右边的参数实际上不应该是一个Class对象(显然它需要是一个“类型”)。我如何在适当的情况下进行投票以实现检查实例? – 2014-12-05 20:07:15
你解决了,因为我打字。谢谢! – 2014-12-05 20:07:47
我也注意到这个错误,我更新了我的答案。 – rgettman 2014-12-05 20:08:12