行为类似布尔值的自定义Java类型?

行为类似布尔值的自定义Java类型?,java,Java,我想创建一个类型,该类型的使用方式与Boolean相同。具体来说,我希望测试构造能够工作: if (mytype) { System.out.println("true"); } 显然,语言将此定义为中的一个特例。一个测试应用程序显示: public class TypeBoolTest { public static void main(String args[]) { Boolean bool = true; if (bool) { System.ou

我想创建一个类型,该类型的使用方式与
Boolean
相同。具体来说,我希望测试构造能够工作:

if (mytype) {
  System.out.println("true");
}
显然,语言将此定义为中的一个特例。一个测试应用程序显示:

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
}
**/
公共类类型booltest{
公共静态void main(字符串参数[]){
布尔布尔布尔=真;
如果(bool){
System.out.println(“bool=true”);
}否则{
System.out.println(“bool=false”);
}
}
}
/**
从“TypeBoolTest.java”编译而来
公共类类型booltest{
公共类型booltest();
代码:
0:aload_0
1:invokespecial#1//方法java/lang/Object。“:()V
4:返回
公共静态void main(java.lang.String[]);
代码:
0:iconst_1
1:invokestatic#2//方法java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
4:astore_1
5:aload_1
6:invokevirtual#3//方法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//方法java/io/PrintStream.println:(Ljava/lang/String;)V
20:goto 31
23:getstatic#4//fieldjava/lang/System.out:Ljava/io/PrintStream;
26:ldc#7//String bool=false
28:invokevirtual#6//方法java/io/PrintStream.println:(Ljava/lang/String;)V
31:返回
}
**/
扩展
Boolean
将不起作用,因为类是final


所以我的问题是:是否可以定义一个自定义类型,以便Java能够识别它遵循
boolean
boxing和unboxing规则?

不,不可能定义自己的类型,这些类型可以由Java自动(取消)装箱

自动(un)装箱仅适用于一组特定的标准类型(包装类型:
Boolean
Integer
Long
等),无法使用用户定义的类型扩展此功能


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

为什么类中的方法不能返回布尔值?一个更好的问题是:为什么需要另一个类似于
布尔值的类型。
Boolean
缺少什么?@kocko这只是我正在处理的项目中的一个web服务结果对象的想法。这只是一个“我可以跳过
myobj.getSuccess()
?”(或类似的)问题。类似的问题