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

时间:2015-07-31 15:58:49

标签: java generics wildcard

said in documentation

...通配符,表示未知类型。可以使用通配符...作为...局部变量的类型

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

的内容
int a;
? b;

但我不能。

真的有可能吗?

5 个答案:

答案 0 :(得分:4)

这是一个措辞令人震惊的声明,我很惊讶在文档中看到它。您不能使用通配符作为变量的类型,但您可以使用中的通配符变量的类型。

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

答案 1 :(得分:2)

这是泛型的文档。 Java是强类型的,不会接受wilcard作为变量类型。

威尔卡只接受通用类型,如:

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

答案 2 :(得分:2)

不,不可能。 Java是强类型的,?用于各种情况(主要与泛型有关),但是如果你不能提前知道类型的话。

我建议您阅读您发布的其他文档,它有一些关于如何使用?的优秀示例。

答案 3 :(得分:0)

你会混淆unbounded wildcard的目的。一般来说,这意味着在处理各种事物(例如集合)时,不知道不关心类型。

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

一般情况下,? extends Object,如果您确实认为自己需要?,则需要使用Object

答案 4 :(得分:0)

不可能,Java Tutorial指出您可以使用这样的通配符定义局部变量:

List <?> localVariable;

但不是这样的:

? localVariable;

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