2016-04-22 2 views
0

привет им пытается заблокировать методы класса таким образом: я хав private boolean status;блокировка булева метода (как не возвращать ничего в булевом методе или отменить булев метод)

status == true означает класс заблокирован и status == false означает, что класс разблокировать

если класс был заблокирован так методы не могут ссылаться, как:

protected void flip() 
    { 
     if (locked()) return; 
     face = (int) (Math.random() * 2); 
    } 

проблема является:

я получил проблему с логическими методами, считают это:

protected boolean isHeads() 
    { 
     //if(!locked()) return false or true; 
     //if i write upper command then its true or false like the bottom command and its unclear that this false or true is for which of them 
     //if(!locked()) 
    //if i write this command then i have to write another return and its the same problem too; 
     return (face == HEADS); 

    } 

Примечание: у меня есть интерфейс, так что я не могу изменить метод относительно заблокирован() и замок и т.д.;

+0

Вам действительно нужно блокировать методы, которые не изменяют состояние вашего объекта? Если это так, 'throw new RuntimeException();'. Это полностью сломает весь код вызова, но выполнение того, что вы просите, сделает это в любом случае. – Siguza

+0

yes Мне нужно это, не могли бы вы дать мне пример кода plz @Siguza –

+1

Вы можете изменить свой метод, чтобы вернуть логический объект, тогда вы можете вернуть значение null, если вы не хотите возвращать true или false. Альтернативно, если вы находитесь на Java8, вы можете вернуть опцию . – mdewit

ответ

3

Правильный дизайн для такого рода программ является бросить исключение, так что код должен быть что-то вроде этого:

protected boolean isHeads() throws ObjectIsLockedException 
{ 
    if(locked()) throw new ObjectIsLockedException(); 
    return (face == HEADS); 
} 

Обратите внимание, что ObjectIsLockedExpception не является исключением Java: вы должны объявить его как класс в вашем коде.

0

Вы не можете вернуть ничего из булевского метода. Это должно быть правдой или ложью. Верните int или enum или заставите функцию ждать.

Смежные вопросы