2013-10-15 2 views
0

У меня есть класс «класс автомобилей» с 4 булевы:Java: Как ссылаться на класс var на основе ввода?

class Car { 
    boolean mWheel1 = true 
    boolean mWheel2 = true 
    boolean mWheel3 = true 
    boolean mWheel4 = true 
} 

У меня также есть метод «пустота removeWheel», что я только передать 1 параметр, количество колес:

void removeWheel(int wheelNum) { 
    // I need help with the following line 
    Car.mWheel(wheelNum) = false 
} 

Последние это то, с чем мне нужна помощь. Как я могу ссылаться на правильную цифровую цифру «Car.mWheel» в классе Car, когда я передаю только номер (1, 2, 3, 4) методу удаления колес?

Имейте в виду, что я могу добавить в машину еще 100 колес, поэтому хочу динамически объединить ссылку на «Car.mWheel (wheelNum)» вместо того, чтобы делать какое-либо утверждение if или статическое решение.

+1

с выражением if/else ... или создать массив, который намного лучше. – libik

+0

'переключатель' - еще одна возможность. Ссылка: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html – bbalchev

+2

В этом примере кричит «массивы! Использовать массивы! ..» – dasblinkenlight

ответ

1

Это, как может выглядеть класс:

public class Car { 

    private boolean[] wheels = new boolean[4]; 

    public Car() { 
     for (int i = 0; i < 4; i++) { 
      wheels[i] = true; 
     } 

    } 

    public void removeWheel(int wheelNum) { 
     getWheels()[wheelNum] = false; 
    } 

    /** 
    * @return the wheels 
    */ 
    public boolean[] getWheels() { 
     return wheels; 
    } 

    /** 
    * @param wheels the wheels to set 
    */ 
    public void setWheels(boolean[] wheels) { 
     this.wheels = wheels; 
    } 
} 
+0

Я думаю, что этот ответ ближе всего к тому, что просит ОП. – bbalchev

4

Вместо

class Car { 
    boolean mWheel1 = true 
    boolean mWheel2 = true 
    boolean mWheel3 = true 
    boolean mWheel4 = true 
} 

void removeWheel(int wheelNum) { 
    // I need help with the following line 
    Car.mWheel(wheelNum) = false 
} 

ли

class Car { 
    boolean mWheel[4] = {true, true, true, true}; 
} 

void removeWheel(int wheelNum) { 
    mWheel[wheelNum] = false; 
} 
0

Массивы выше лучший вариант, но если вы хотите, чтобы это сделать без изменения атрибутов:

void removeWheel(int wheelNum) { 
    switch (wheelNum) { 
     case 1: 
      mWheel1 = false; 
      break; 
     case 2: 
      mWheel2 = false; 
      break; 
     case 3: 
      mWheel3 = false; 
      break; 
     case 4: 
      mWheel4 = false; 
      break; 
     default: 
      break; 
    } 
} 
1

Да, в этом тривиальном примере вы хотели бы использовать массив или коллекцию для своих колес. Но могут быть законные причины для динамического доступа к имени по имени, и вы можете сделать это с помощью API отражения:

void removeWheel(int wheelNum) throws Exception { 
    Car.class.getDeclaredField("mWheel" + wheelNum).setBoolean(this, false); 
}   
Смежные вопросы