具有可变数量参数的Java“虚拟”方法

时间:2015-04-20 15:23:48

标签: java c# android oop

我是OOP的新手,我希望在JAVA - Android中使用扩展类中的函数,但参数数量不同。

据我记得在C#中我可以做到以下几点:

主类

    class Command {
     protected int NrTokens
     protected String cmd
     protected String[] AnswerTokens

     Command(String[] Tokens) { 
        AnswerTokens = Tokens   
    }
     virtual int Parse()
     virtual int Send()
}

使用虚拟方法如下

class Command1 : Command{
 protected int NrTokens=2;
 protected String cmd="abc";
 protected String AnswerTokens;
//

class ComandPing():Command(AnswerTokens);


public void Parse(){
if (AnswerTokens.size != NrTokens) 
    throw exception
//show on screen the status
}

Send() {
    //todo
}
}

我在这样尝试使用Java

abstract class Command {
    protected int NrTokens;
    protected String cmd;
    protected String[] AnswerTokens;


    public void SetAnswerTokens(String Tokens[]){
        AnswerTokens = Tokens;
    }


    abstract void Parse();
    abstract void Send();



}

并且

public class Command1 extends Command {

    protected int NrTokens=2;
    protected String cmd="PING";
    protected String AnswerTokens;

    public Command1(String Tokens[]){

    }

    @Override
    void Parse(String b){
        if (AnswerTokens.length()!= NrTokens)
        {

        }

    }

    @Override
    void Send(int a) {

    }

问题是,如果我使用参数,它不是@Overriding。我只需要来自某些子类的参数,比如Command1,Command10,但不需要来自Command5,我需要调用不带参数的Send和Parse。

你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

如果要覆盖Java中的方法,则不能更改参数计数,类型或顺序。

如果某些子类型需要一个且需要多态,那么你肯定需要一个参数。

我建议使用包装类。 您可以使用新的Java 8 Optional类型或Google Guavas Optional类型。或者,如果可以提供额外的好处,您可以自己写一个。

对于Java 8可选请参阅:https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html

对于Guava可选请参阅:https://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained

Null对象模式也可能对您有用。基本思想是使用一个可能代表空参数的Object(类似于空列表而不是null)。

请参阅:http://en.wikipedia.org/wiki/Null_Object_pattern