在java中,Enumeration <! - ? - >是什么意思?

时间:2011-10-13 01:32:19

标签: java

Enumeration<?>是什么意思?

有没有办法代表一般通用?

4 个答案:

答案 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()。这是一个早期(差)尝试,被IterableIterator取代。一些旧班级使用它,例如VectorStringTokenizer

答案 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中并不完全是一门艺术,它们需要有点限制*但是不要引用我的话