如何在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 中仅在通用括号中使用排他性,替换类型参数。
它在 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 中仅在通用括号中使用排他性,替换类型参数。