当我执行时,我需要使用以前工作流的一个或多个输出为不同的工作流构建一组输入
public interface InputBuilder<I extends SwfInput, O extends SwfOutput> {
public I buildInput(O... output);
}
public class SwfAuthorisationInputBuilder implements InputBuilder {
@Override
public SwfAuthorisationInput buildInput(SwfOutput swfEventInitOutput) {
SwfEventInitOutput output = (SwfEventInitOutput ) swfEventInitOutput;
SwfAuthorisationInput authorisationInput = oddFactory.newInstance(SwfAuthorisationInput.class);
authorisationInput.setNetworkEvent(output.getNetworkEvent());
return authorisationInput;
}
我收到了一个错误,Netbeans提示修复程序给了我这个。我在这里做错了什么?
@Override
public SwfInput buildInput(SwfOutput... output) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
这就是的确切错误
方法不会覆盖或实现超类型中的方法
我怎样才能避免在这里铸造?
@Override
public SwfAuthorisationInput buildInput(SwfOutput... output) {
SwfEventInitOutput swfEventInitOutput = (SwfEventInitOutput ) output[0];
SwfLocationDetectionOutput swfLocationDetectionOutput = (SwfLocationDetectionOutput) output[1];
SwfAuthorisationInput authorisationInput = oddFactory.newInstance(SwfAuthorisationInput.class);
authorisationInput.setNetworkEvent(swfEventInitOutput.getNetworkEvent());
return authorisationInput;
}
buildInput(SwfOutput swfEventInitOutput)
和
buildInput(SwfOutput... swfEventInitOutput)
是不同的方法签名(Java中的方法名称和参数类型(。如果要覆盖一个方法,则必须精确地*指定父类的签名。
正如我所看到的,您只需要这个数组中的一个元素。如果是这样的话,你可以从阵列中取出它,检查阵列的大小,然后:
swfEventInitOutput element = swfEventInitOutput.length > 0 ? swfEventInitOutput[0] : null;
if(element != null) { ... }
另一种方法是对数组进行迭代,并对每个元素执行这样的操作:
for (swfEventInitOutput element : swfEventInitOutput) { ... }
此外,我建议您在实现InputBuilder
接口时指定泛型类型。它可以帮助您避免在被重写的方法中进行强制转换。
这里的一个积极方面是,您使用了有界泛型类型,它阻止了Object...
(或Object[]
(。