将1到多个相同对象类型的参数传递给

时间:2016-09-29 10:59:48

标签: java generics netbeans override variadic-functions

我需要使用以前工作流程中的一个或多个输出为不同的工作流程构建一组输入,当我这样做时

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;
        }

1 个答案:

答案 0 :(得分:4)

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[])。