参数数量可变的 Java "Virtual"方法

标签 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。

你能帮帮我吗?

最佳答案

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

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

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

对于 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)。

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

关于参数数量可变的 Java "Virtual"方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29751999/

相关文章:

android - 如何获取我保存在 sharedpreference 中的 json 对象的值从一个 Activity 到另一个 Activity ?

java - Android MultiTouch 抬起手指时崩溃

java - XSD 转 Java,指定使用 Java HashMap

java - 如何在 Android 应用程序开发中从 SQLite 数据库检索图像?

Java相当于unsigned long long?

c# - 带有隐式转换运算符的运行时 InvalidCastException

java - 无法读取Spring应用程序中的POST参数

c# - 如何从对话框加载事件 "Cancel"

c# - 将参数从代码隐藏传递给 javascript 函数,错误

Android Studio 错误 "Installation failed due to: ' 连接被拒绝 : connect'"