簡體   English   中英

Java varargs需要無限數量的變量

[英]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

我認為,一切正確。 您的情況有什么問題? 您是否使用loggingSystem.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.

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