JEP 402:增强型原始类型的值对象(预览)


将八个包装类(java.lang.Integer、java.lang.Double等)迁移为具有optional构造函数的值类,提高性能。

使用 --enable-preview编译时和运行时标志启用。

八个包装类如下:

  • java.lang.Boolean
  • java.lang.Character
  • java.lang.Byte
  • java.lang.Short
  • java.lang.Integer
  • java.lang.Long
  • java.lang.Float
  • java.lang.Double

编译器和引导类加载器使用特殊逻辑来定位这些类文件;当启用预览功能时,会找到这些类的修改版本。
修改后的包装器类是value类并具有optional 构造函数。这最大限度地减少了包装的开销——它们的编码本质上与它们包含的原始值的编码相同。

int i = 12;
int iSize = i.SIZE;
double iAsDouble = i.doubleValue();
Supplier<String> iSupp = i::toString;

在运行时,装箱会在成员访问发生之前应用于原始值。

原始类型的名称也可用于字段访问、方法调用或方法引用。

int max = int.MAX_VALUE;
int zeros = int.numberOfLeadingZeros(max);
ToIntFunction<String> parser = int::parseInt;

原始类型可以用作类型参数

interface Foo<T> {
    T* get();          // Foo<char> returns char
    T! getNonNull();     
// Foo<char> returns char
    T? getOrNull();     
// Foo<char> returns Character?
    T getOrAlternate(Supplier<T> alt);   
//Foo<char> returns Character
}

详细点击标题