行为类似布尔值的自定义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()
?”(或类似的)问题。类似的问题