从JEP 286中,我们可以在JDK 10(18.3)中利用本地类型推断(var
)。JEP声明将进行以下编译,这是预期的:
var list = new ArrayList<String>(); // infers ArrayList<String>
var list = new ArrayList<>();
谢谢!
是的,var
和菱形运算符可以组合在一起。编译器将推断最具体的泛型类型:
var list = new ArrayList<>(); // Infers ArrayList<Object>
var list = new ArrayList<>(List.of(1, 2, 3)); // Infers ArrayList<Integer>
您甚至可以将它们与匿名类组合在一起:
var list = new ArrayList<>() {};
问题内容: 我尝试扫描有关本地类型推断的JEP-286。我看到这仅适用于局部变量- 了解。因此这确实有效: 我确实看到,另一方面,它无法编译: 很明显,事实并非如此,因为JEP是这样说的。现在我的问题是: 对于宣布失败的 公共/受保护 成员,至少是IMO,这是完全合理的。但是,为什么即使编译也不编译呢?我只能假设您仍然可以通过反射保留该变量(而我无法获得这样的局部字段)…而且获取该变量可能需要强制
主要内容:Java10 局部变量类型推断,声明局部变量的旧用法,声明局部变量的新用法,需要注意的事项,Java10 局部变量类型推断的示例Java10 局部变量类型推断 局部变量类型推断是 Java 10 以后可用语言最明显的变化之一。它允许使用 var 定义变量而不指定它的类型。编译器使用提供的值推断变量的类型。这种类型推断仅限于局部变量。 声明局部变量的旧用法 声明局部变量的新用法 需要注意的事项 在成员变量、方法参数、返回值的情况下没有类型推断。 局部变量应在声明时初始化,否则编译器将无法
在Java10中,我们可以使用类型推断。
主要内容:1 Java8 类型推断的介绍,2 Java8 类型推断的案例1,3 Java8 类型推断的案例21 Java8 类型推断的介绍 类型推断是Java的一项功能,它使编译器可以查看每个方法调用和相应的声明以确定参数的类型。 Java在Java 8中提供了类型推断的改进版本。 1.1 Java8以前 在下面的声明中,我们在一侧提到了arraylist的类型。这种方法是在Java 7中引入的。在这里,您可以将第二面留为<>,并且编译器将通过引用变量的类型来推断其类型。 1.2 Java8以后