![](/img/trans.png)
[英]How to conditionally pass parameters in Java to a method that takes a variable number of arguments?
[英]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)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.