2015-04-08 2 views
1

Я хотел бы создать тип, который можно использовать так же, как Boolean. В частности, я хотел бы тест конструкции для работы:Пользовательский тип Java, который действует как Boolean?

if (mytype) { 
    System.out.println("true"); 
} 

Очевидно, что язык определяет это как частный случай в section 5.1.7. И тестовое приложение показывает его:

public class TypeBoolTest { 
    public static void main(String args[]) { 
    Boolean bool = true; 

    if (bool) { 
     System.out.println("bool = true"); 
    } else { 
     System.out.println("bool = false"); 
    } 
    } 
} 

/** 
Compiled from "TypeBoolTest.java" 
public class TypeBoolTest { 
    public TypeBoolTest(); 
    Code: 
     0: aload_0 
     1: invokespecial #1     // Method java/lang/Object."<init>":()V 
     4: return 

    public static void main(java.lang.String[]); 
    Code: 
     0: iconst_1 
     1: invokestatic #2     // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean; 
     4: astore_1 
     5: aload_1 
     6: invokevirtual #3     // Method java/lang/Boolean.booleanValue:()Z 
     9: ifeq   23 
     12: getstatic  #4     // Field java/lang/System.out:Ljava/io/PrintStream; 
     15: ldc   #5     // String bool = true 
     17: invokevirtual #6     // Method java/io/PrintStream.println:(Ljava/lang/String;)V 
     20: goto   31 
     23: getstatic  #4     // Field java/lang/System.out:Ljava/io/PrintStream; 
     26: ldc   #7     // String bool = false 
     28: invokevirtual #6     // Method java/io/PrintStream.println:(Ljava/lang/String;)V 
     31: return 
} 
**/ 

Расширение Boolean не будет работать, потому что класс является окончательным.

Итак, мой вопрос: можно ли определить настраиваемый тип, чтобы Java признала, что он следует правилам бокса и разблокировки boolean?

+0

Почему метод внутри класса не возвращает логическое значение? –

+2

Лучший вопрос: зачем вам нужен другой тип, который действует как 'Boolean'. Что такое 'Boolean'? –

+0

@kocko это просто идея для объекта результатов веб-сервиса в проекте, над которым я работаю. Это просто «можно ли пропустить« myobj.getSuccess() »? (или аналогичной) вещи. –

ответ

10

Нет, вы не можете определить свои собственные типы, которые могут быть автоматическими (un) в штучной упаковке Java.

Auto (ООН) бокс работает только с определенным набором стандартных типов (типов оболочек: Boolean, Integer, Long и т.д.), и нет никакого способа расширить это с пользовательскими типами.

Список типов, которые могут быть автобоксированными и -университетскими, определяется в разделах Спецификации языка Java 5.1.7 и 5.1.8.