所以我试图创建一个参数化类型,它适用于Java中的任何类型,包括任何对象,以及基元类型。我该怎么做呢?
好吧,假设我希望for-each的目标是原语,所以它的
for(int i:MyClass)
这样的事情。这可能吗?答案 0 :(得分:4)
根据你对Bozho的回答的评论,你可能想要这样的事情:
interface MyInterface<T> extends Iterable<T> {
}
并且不,你不能为原始类型做到这一点。你可以模拟一个原始类型的迭代器,但它永远不会真的是Iterable,就像在for-each循环中一样。
答案 1 :(得分:2)
我可能会遗漏一些东西但你为什么不实施Iterable<T>
?
答案 2 :(得分:1)
public MyClass<E>
它不包含基本类型,即你不能声明MyClass<int> myobj;
,但你可以使用包装器(java.lang.Integer
等)
答案 3 :(得分:1)
对于原始类型,你无法做到这一点。如果你“幸运”,你会得到邪恶的自动装箱,如果你运气不好,你可能会受到编译器的抗议。如果你看一下GNU Trove或Apache Commons Primitives,你会看到并行宇宙是由于希望在原始类型上做等效的集合框架而产生的。
我想如果你确定自动装箱的开销是可以接受的,那么它可能是有意义的,但我无法克服我发现它令人反感的倾向。
答案 4 :(得分:0)
这应该有用,但我怀疑它不是你真正想要的......
final List< Integer> list;
...
for(final int i : list)
{
}