Я пытаюсь применить varargs. Я предрек метод, который требует неопределенного количества переменных, как это:Java varargs требует неопределенного числа переменных
private Subject carMonitor;
public AdvancedMonitor(Subject ... carMonitors){
for (Subject carMonitor : carMonitors){
this.carMonitor = carMonitor;
carMonitor.registerObserver(this);
}
}
Однако, когда я пытаюсь вызвать его в мой основной метод, я не могу использовать ничего, кроме одного аргумента:
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();
}
}
Когда вы говорите, «Только второй один работает», что именно вы имеете в виду? Вы получаете исключение компиляции для других 2? Исключение времени выполнения? – radoh
"this.carMonitor = carMonitor", подозрительное изменение состояния здесь –
@radoh Я получаю предупреждение от NetBeans: 'required: Subject found: no arguments reason: фактические и формальные списки аргументов различаются по длине' – user25976