Як передати об'єкт в логічне значення?


78

Як я можу передати об’єкт Java у логічний примітив

Я намагався, як показано нижче, але це не працює

boolean di = new Boolean(someObject).booleanValue();

Конструктор Boolean (Object) не визначений

Порадьте, будь ласка.

Відповіді:


133

Якщо об'єкт насправді є Booleanекземпляром, просто перекиньте його:

boolean di = (Boolean) someObject;

Явний привід зробить перетворення Boolean, а потім буде автоматично розпаковуватись до примітивного значення. Або ви можете зробити це явно:

boolean di = ((Boolean) someObject).booleanValue();

Якщо, someObjectоднак, не посилається на булеве значення, що ви хочете зробити з кодом?


1
Ні, це не булев екземпляр, але має значення як true або false
Раві Гупта,

3
Мені цікаво, який тип змінної ... :)
helios

13
Якщо припустити, що true / false є рядками, які ви можете використовувати: boolean b = Boolean.parseBoolean (String.valueOf (someObject)); Майте на увазі, що це поверне false для будь-якого значення рядка, крім "true" (не враховує регістр), а отже, поверне false, якщо someObject має значення null.
Адамскі

@Jon Відповідь на запитання, яке ви задали в останньому рядку, ми можемо використовувати instanceOfметод перед тим, як передати його в Boolean. Це не дасть винятку для акторів.
vikiiii

@vikiiii: Мені відомий екземпляр, але це питання того, як ми можемо це перевірити - це не відповідає на запитання, яке я задав, яка є бажана поведінка .
Джон Скіт,

35

Припускаючи, що yourObject.toString () повертає "true" або "false", ви можете спробувати

boolean b = Boolean.valueOf(yourObject.toString())

1
Виникають проблеми з розумінням, чому потрібно toString (). Якщо це не рядок, то це просто об’єкт?
James P.

2
оскільки yourObject є екземпляром типу Object, а метод valueOf приймає String.
Neets

2
Це, мабуть, має бути, Boolean.parseBooleanщоб уникнути боксу та розпакування a Boolean.
Ben Lings
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.