当前位置: 首页 > 知识库问答 >
问题:

像布尔值一样的自定义 Java 类型?[重复]

宇文峰
2023-03-14

我想创建一个可以以与布尔值相同的方式使用的类型。具体来说,我希望测试结构正常工作:

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

很明显,在第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
}
**/

扩展<code>布尔</code>将不起作用,因为类是最终的。

所以我的问题是:是否可以定义一个自定义类型,以便 Java 能够识别它遵循布尔装箱和取消装箱规则?

共有1个答案

农诚
2023-03-14

不,不可能定义你自己的类型来被Java自动装箱。

自动(取消)装箱只适用于一组特定的标准类型(包装类型:< code>Boolean、< code>Integer、< code>Long等)。)并且没有办法用用户定义的类型来扩展它。

Java语言规范5.1.7和5.1.8节中定义了可以自动装箱和取消装箱的类型列表。

 类似资料:
  • 问题内容: 为什么不像天真的预期那样起作用? (输出为) 问题答案: 为了与Python 2-3兼容,只需将其添加到示例中: 或将Foo的原始定义扩展为包括: 当然,您也可以反过来定义它们,方法名称在哪里,然后将其分配给,但是我认为该名称只是Python根据其与对象的等价性将对象解释为真或假的原始C- ishness的遗产。零。只需添加上面的语句,您的代码即可在Python 2.x上运行,并且在升

  • 我有一个自定义dto类: 和一个使用Web Api(4.5. net框架)的控制器 客户端只有4.0.net框架,因此我将无法使用PostAsJsonAsync()方法。将对象从客户端传递到服务器的解决方案是什么? 我尝试了如下方法: 然而它给了我一个例外: 难道不能使用牛顿软件库吗?

  • 在对XML文件应用转换时,我得到了这个错误(即,未定义有效的布尔值)。这里有一个奇怪的陷阱: *我的应用程序从一个文件位置读取500到800个XML文件(XML文件大小范围从几KB到10MB),然后对每个文件进行转换。最初一切都很顺利,但在一些执行之后,它会在错误下面抛出: productsfromloc_v3.xsl: forg0006第651行错误:在xsl:call-template nam

  • 问题内容: 尝试按照Apple文档(和教程化的)创建Launch Helper时,我似乎遇到了麻烦,原因是将Objective- C代码移植到Swift中…在此方面,谁的编译器再也不过分了案件。 该错误似乎始终是: 我尝试过在多个位置进行转换,以防万一我只是在处理一个多余的,古老的原语(由Obj- C或Core Foundation引入)而无济于事。 为了以防万一,我尝试投射响应: 产生错误: …

  • 我发现了这个语法: 这个有两个点的语法是什么:叫? 在哪里可以找到有关它的信息? 它是仅适用于布尔值还是以其他不同的方式实现?

  • Rust 自定义数据类型主要是通过下面这两个关键字来创建: struct: 定义一个结构体 enum: 定义一个枚举类型 而常量的创建可以通过 const 和 static 关键字来创建。