像Boolean这样的自定义Java类型?

时间:2015-04-08 13:41:27

标签: 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装箱和拆箱规则?

1 个答案:

答案 0 :(得分:11)

不,不可能定义自己的类型,可以由Java自动(un)装箱。

自动(联合)装箱仅适用于一组特定的标准类型(包装类型:BooleanIntegerLong等)并且无法扩展此功能用户定义的类型。

可以自动装箱和取消装箱的类型列表在Java语言规范部分5.1.75.1.8中定义。