簡體   English   中英

具有可變數量參數的Java“虛擬”方法

[英]Java “Virtual” method with variable number of parameters

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM