Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Тернарный оператор умеет обрабатывать возвращаемые, значения? 
:(
    Опции темы
Royan
Дата 8.6.2005, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



Удивительно, если нет. Код у меня такой:

Код

public class mytest {

    private boolean bool = false;

    public boolean getBool() {
        return bool;
    }

    public void setBool(boolean val) {
        bool = val;
    }
    public static void main(String[] args) throws IOException {
        mytest obj = new mytest();
        
        /* По всей видимости следующей строкой пользоваться никак нельзя :( */
        // obj.getVal() ? obj.setBool(false) : obj.setBool(true);

        /* Надо писать так */
        if (obj.getBool()) {
            obj.setBool(false);
        } else {
            obj.setBool(true);
        }
    }
}


Неужели так и должно быть?




--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
DarkDS
Дата 8.6.2005, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: 11
Всего: 16



Эээ... Это ж конструкция для быстрого выбора значений.
Вот так работает:
Код

obj.setBool(obj.getBool()?false:true);

PM MAIL   Вверх
batigoal
Дата 8.6.2005, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



А не проще так:
Код

obj.setBool(!obj.getBool());



--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
DarkDS
Дата 8.6.2005, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: 11
Всего: 16



Проще. Но просили выражение с ?:
Добавлено @ 19:50
smile
PM MAIL   Вверх
Royan
Дата 8.6.2005, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



То есть выходит второй и третий аргументы тернарного оператора не умеют вызывать методы, правильно я понимаю?


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Domestic Cat
Дата 8.6.2005, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



В спецификации написано следующее
Цитата
The conditional operator may be used to choose between second and third operands of numeric type, or second and third operands of type boolean, or second and third operands that are each of either reference type or the null type. All other cases result in a compile-time error.
Note that it is not permitted for either the second or the third operand expression to be an invocation of a void method. In fact, it is not permitted for a conditional expression to appear in any context where an invocation of a void method could appear (§14.8).


А у тебя 2 и 3 операнды типа void.


--------------------

PM   Вверх
DarkDS
Дата 8.6.2005, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: 11
Всего: 16



В отличии от С/С++ в яве должно быть либо переменная, либо метод с возвращаемым значением.
PM MAIL   Вверх
Royan
Дата 10.6.2005, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



Все понятно, спасибо за разъяснение!
Цитата
А у тебя 2 и 3 операнды типа void.

Уже в который раз какие-то косяки выплывают, в самой, что ни на есть классике. Вот тут я создал обсуждение еще одного: http://forum.vingrad.ru/index.php?showtopic=55167

Добавлено @ 17:18
2DarkDS
Цитата
В отличии от С/С++ в яве должно быть либо переменная, либо метод с возвращаемым значением.

Там еще от компилятора многое зависит. Borland в свое время тоже не умел обращаться функциями/методами внутри тернарного оператора по человечески.


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.