如何在Java中使用通配符作为局部变量的类型?

How to use wildcard as the type of local variable in Java?

它在 documentation 中说

...wildcard, represents an unknown type. The wildcard can be used ... as the type of a ... local variable

从我的角度来看,这意味着我可以写出类似

的东西
int a;
? b;

但我不能。

真的可以吗?

这是泛型的文档。 Java 是强类型的,不接受通配符作为变量类型。

通配符仅在如下泛型中被接受:

List<?> x = new ArrayList<>()

List<? extends String> x = new ArrayList<>()

这是一个措辞令人震惊的陈述,我很惊讶地在文档中看到它。不能使用通配符as变量的类型,但是可以使用通配符in变量的类型

? a;       // no
List<?> b; // yes

不,不可能。 Java 是强类型的,当您无法提前知道类型时,? 用于多种情况(主要与泛型有关)。

我建议您阅读您发布的其余文档,其中有一些关于如何使用 ?.

的优秀示例

您混淆了 unbounded wildcard 的用途。一般来说,这意味着你要么不知道要么不关心处理各种事物时的类型,例如集合。

例如,List<?> simpleList 是一个包含未知类型的列表。

一般来说,? extends Object,所以如果你真的认为你需要 ?,你会想要使用 Object

不,这是不可能的,Java 教程提示您可以像这样使用通配符定义局部变量:

List <?> localVariable;

但不是这样的:

? localVariable;

通配符在 Java 中仅在通用括号中使用排他性,替换类型参数。