提问者:小点点

通过扩展字节[closed],将typedef字节U8转换为面向对象的Java类


< b >想改进这个问题?通过编辑此帖子添加详细信息并澄清问题。

我想转换:

typedef byte   U8;

要像这样OO:

public final class U8 extends Byte    { 
      U8( byte x  ){
          super(x); 
      } 
}; 

这导致一个错误“类型U8不能子类化最终类字节”。

有没有一个简单的方法来做到这一点?


共1个答案

匿名用户

执行此操作的简单方法是重用其他人的库。本 Q 中有一些线索

    < li >有无符号数类型包装的Java库吗?

你实际想要做的事情(扩展java.lang.Byte)既是不可能的(因为Byte类是最终的),而且在概念上是错误的。由无符号字节和有符号字节表示的数字集是不同的。因此,在概念上,两者都不是另一个的子类型。如果将一个类建模为另一个的 Java 子类,则最终将出现类型异常和运行时值检查以避免它们。

最后,虽然这种建模为您提供了一个不错的OO程序,但缺点是相对于使用基元类型和“调整”来处理有符号与无签名,您将受到显着的性能影响。您可能有兴趣知道 Java 8 中有一个新的 API,用于对有符号基元类型执行未签名操作。

  • https://blogs.oracle.com/darcy/entry/unsigned_api
  • 如何在java 8中使用无符号整数?

API由现有包装类中的新静态方法组成。