【问题标题】:Java "Virtual" method with variable number of parameters具有可变参数数量的 Java“虚拟”方法
【发布时间】:2015-06-27 10:06:43
【问题描述】:

我是 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。

你能帮帮我吗?

【问题讨论】:

  • 抱歉,您的 C++ 设计无法移植到 Java。
  • 旁注:Java 命名约定与 C++ 中的不同:方法名和变量名应使用驼峰命名法(即没有首字母大写)。
  • 这个问题没有一点 C++ 代码。您能否澄清前两个代码示例是用哪种语言编写的?是 C# 吗?关于语言关系,整个问题还不清楚,请改进。
  • C# 抱歉,我编辑有问题

标签: java c# android oop


【解决方案1】:

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

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

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

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

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

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

见:http://en.wikipedia.org/wiki/Null_Object_pattern

【讨论】:

    猜你喜欢
    • 2017-08-25
    • 1970-01-01
    • 2017-02-04
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多