Enumeration<?>是什么意思?
有没有办法来表示一般的泛型?
发布于 2011-10-13 09:53:45
<?>语法是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。
发布于 2011-10-13 09:36:19
问号表示它代表所有类型。这是一个example
除了具体的实例化之外,还有所谓的通配符实例化。它们没有具体的类型作为类型参数,而是所谓的通配符。通配符是带有“?”的语法结构。这不仅仅意味着一种类型,而是一系列类型。通配符最简单的形式就是一个问号,代表“所有类型”。
示例(通配符参数化类型):
public void printPair( pair) { System.out.println("("+pair.getFirst()+","+pair.getSecond()+")");} Pair limit =新的Pair ("maximum",1024L);printPair(limit);
发布于 2011-10-13 09:53:55
虽然很容易认为?表示"any“或"all”类型,但它实际上指定了一个未知类型。如果它真的是"any",你会认为这是可行的:
List<?> l = ...
l.add("foo");
l.add(new Date())这是因为在这段代码中类型是未知的,所以编译器无法判断是否应该允许您向其添加任何内容。
https://stackoverflow.com/questions/7748450
复制相似问题