我正在为支持不同类型小部件的网页编写测试代码,每个小部件我都用一个类表示(XWidget extends AbstractWidget
,YWidget extends AbstractWidget
等),我需要一种创建 Widget 对象的简单方法。理想情况下,它看起来像这样:
public static AbstractWidget getWidget(ObjectType widgetType) {
//return some subclass of AbstractWidget
}
public enum ObjectType {
X(XWidget.class), Y(YWidget.class);
//include constructor etc.
}
我目前有一个看起来相当困惑的实现,其中涉及将 Class 对象作为参数传递(请参见下面的示例),但这并不是最好的方法。
public static <T extends AbstractWidget<?>> T getWidget(Class<T> objectType) {
try {
return objectType.getConstructor(new Class[] {WebElement.class}).newInstance(/*some WebElement*/);
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
e.printStackTrace();
}
return null;
}
public <T extends AbstractWidget<?>> T createWidget(Class<T> objectType) {
//create widget of type objectType
return getWidget(objectType);
}
任何帮助让泛型东西(我不太理解)工作的帮助都将不胜感激,甚至只是一种完全不同的方法。
最佳答案
您可以让枚举负责实例化小部件:
public static AbstractWidget getWidget(ObjectType widgetType) {
return widgetType.instantiate();
}
public enum ObjectType {
X {
@Override
XWidget instantiate() {
return new XWidget();
}
},
Y {
@Override
YWidget instantiate() {
return new YWidget();
}
};
abstract AbstractWidget instantiate();
}
关于java - Java 如何返回一个类依赖于指定参数的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34178954/