Enumeration<?>
是什么意思?
有没有办法代表一般通用?
答案 0 :(得分:3)
<?>
语法是java指定泛型类型是“无界”的方式 - 即它可以是“任何东西”。
Enumeration<?>
是一个带有“无界类型”的枚举 - 您可以为这样的变量指定任何类型的枚举,例如:
Vector<String> v = new Vector<String>();
Enumeration<String> es = v.elements();
Enumeration<?> e = es; // This assignment compiles OK
但是,无限制,Enumeration<?>
的nextElement()方法返回类型为Object
(即使它实际上是Enumeration<String>
),因此您可能需要执行:
String s = (String)e.nextElement(); // Unsafe cast - compiler warning
对于背景,Enumeration是一个带有两个方法hasMoreElements()和}的类型化接口
nextElement()。这是一个早期(差)尝试,被Iterable和Iterator取代。一些旧班级使用它,例如Vector和StringTokenizer。
答案 1 :(得分:2)
问号表示它代表所有类型。这是一个example:
除了具体实例化之外还有所谓的通配符 实例化。它们没有具体类型作为类型参数, 但所谓的通配符。通配符是一种语法结构,带有“ ? “这不仅仅代表一种类型,而且代表一系列类型 最简单的形式通配符只是一个问号,代表“所有 类型“。
示例(通配符参数化类型):
public void printPair( Pair<?,?> pair) { System.out.println("("+pair.getFirst()+","+pair.getSecond()+")"); } Pair<?,?> limit = new Pair<String,Long> ("maximum",1024L); printPair(limit);
答案 2 :(得分:2)
虽然将?
视为代表“任何”或“所有”类型很诱人,但它实际上指定了一种未知类型。如果它真的是“任何”,你会期望这个工作:
List<?> l = ...
l.add("foo");
l.add(new Date())
但事实并非如此。那是因为在这段代码中不知道类型,所以编译器无法判断是否应该允许你添加任何内容。
答案 3 :(得分:0)
?是通配符。你可以把它表示为?扩展具有相同效果的对象或类似的东西。根据我的理解,通配符到目前为止在Java中并不完全是一门艺术,它们需要有点限制*但是不要引用我的话