[英]Java varargs to require indefinite number of variables
我正在嘗試使用varargs。 我已經聲明了一個方法,該方法需要不確定數量的變量,如下所示:
private Subject carMonitor;
public AdvancedMonitor(Subject ... carMonitors){
for (Subject carMonitor : carMonitors){
this.carMonitor = carMonitor;
carMonitor.registerObserver(this);
}
}
但是,當我嘗試在main方法中調用它時,除了一個參數外,我無法使用其他任何東西:
BigCar bigCar = new BigCar();
SmallCar smallCar = new SmallCar();
AdvancedMonitor doubleAdvancedDisplay1 = new AdvancedMonitor();
AdvancedMonitor doubleAdvancedDisplay2 = new AdvancedMonitor(bigCar);
AdvancedMonitor doubleAdvancedDisplay3 = new AdvancedMonitor(bigCar, smallCar);
僅第二個有效。 為什么是這樣?
與我的界面有關嗎?
public interface Subject {
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObservers();
}
大型汽車界面-小型汽車目前大致相同:
public class BigCar implements Subject {
private ArrayList observers;
private int state;
public BigCar(){
observers = new ArrayList();
}
public void registerObserver(Observer o){
observers.add(o);
}
public void removeObserver(Observer o){
int i = observers.indexOf(o);
if (i >= 0){
observers.remove(i);
}
}
public void notifyObservers(){
for (int i = 0; i < observers.size(); i++){
Observer observer = (Observer)observers.get(i);
observer.update(state);
}
}
public void stateChanged() {
notifyObservers();
}
public void setState(int state){
this.state = state;
stateChanged();
}
}
我寫以下代碼:
public class Test {
public static class AdvancedMonitor {
private String carMonitor;
public AdvancedMonitor(String... carMonitors) {
for (String carMonitor : carMonitors) {
this.carMonitor = carMonitor;
System.out.println(this.carMonitor);
}
}
}
public static void main(String[] args) {
String bigCar = "bigCar";
String smallCar = "smallCar";
System.out.println("step 1");
AdvancedMonitor doubleAdvancedDisplay1 = new AdvancedMonitor();
System.out.println();
System.out.println("step 2");
AdvancedMonitor doubleAdvancedDisplay2 = new AdvancedMonitor(bigCar);
System.out.println();
System.out.println("step 3");
AdvancedMonitor doubleAdvancedDisplay3 = new AdvancedMonitor(bigCar, smallCar);
}
}
我有以下結果:
step 1
step 2
bigCar
step 3
bigCar
smallCar
我認為,一切正確。 您的情況有什么問題? 您是否使用logging
或System.out.println
調試問題? 看來您的問題與Java varagrs無關,但是carMonitor.registerObserver(this)
存在一些異常。
PS另外,您了解每個AdvancedMonitor都只有一個可變的carMonitor? 並使用new AdvancedMonitor(bigCar, smallCar);
結果,只有在private String carMonitor;
才具有AdvancedMonitor private String carMonitor;
?
PPS在construstor中使用this
也是一個壞主意,因為在運行construstor時對象並不是真正創建的。
實際上,構造函數可以工作。
請檢查以下語句:
SmallCar和BigCar都實現Subject
AdvancedMonitor類實現Observer
AdvancedMonitor doubleAdvancedDisplay沒有多次聲明,但是在您的代碼中是多次聲明 。 它應該像這樣:
AdvancedMonitor doubleAdvancedDisplay1 = new AdvancedMonitor();
AdvancedMonitor doubleAdvancedDisplay2 = new AdvancedMonitor(bigCar);
AdvancedMonitor doubleAdvancedDisplay3 = new AdvancedMonitor(bigCar, smallCar);
希望對您有幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.