设置迭代器的Java泛型
当我使用实现设置迭代器的Java泛型,java,generics,for-loop,iterator,Java,Generics,For Loop,Iterator,当我使用实现ArrayList并更改元素的泛型类型的类时,我注意到Java做了一些有趣的事情(或者至少是Netbeans)。我基本上创建了一个抽象类,它扩展了ArrayList和一些子类,这些子类应该与String对象一起工作(比如ArrayList)。我为实现这一目标所做的一件事是: public abstract class A extends ArrayList { ... } @Override public abstract class B extends A { publ
ArrayList
并更改元素的泛型类型的类时,我注意到Java做了一些有趣的事情(或者至少是Netbeans)。我基本上创建了一个抽象类,它扩展了ArrayList
和一些子类,这些子类应该与String
对象一起工作(比如ArrayList
)。我为实现这一目标所做的一件事是:
public abstract class A extends ArrayList {
...
}
@Override
public abstract class B extends A {
public Iterator<String> iterator() {
return super.iterator();
}
}
public abstract class A extends ArrayList {
...
}
public abstract class B<String> extends A {
@Override
public Iterator<String> iterator() {
return super.iterator();
}
}
您知道为什么会发生这种情况吗?如果不实现自己的迭代器,我如何修复它?使用组合而不是继承
public class A implements Iterable<String>{
List<String> myList = new ArrayList<String>();
//do operations on myList
public Iterator<String> iterator() {
return myList.iterator();
}
}
公共类A实现了Iterable{
List myList=new ArrayList();
//对myList执行操作
公共迭代器迭代器(){
返回myList.iterator();
}
}
使用组合而不是继承
public class A implements Iterable<String>{
List<String> myList = new ArrayList<String>();
//do operations on myList
public Iterator<String> iterator() {
return myList.iterator();
}
}
公共类A实现了Iterable{
List myList=new ArrayList();
//对myList执行操作
公共迭代器迭代器(){
返回myList.iterator();
}
}
不确定您想做什么,但如果我理解正确,您需要一个扩展ArrayList并具有通用类型字符串的类。。。也许你正在寻找这个:
public abstract class A<T> extends ArrayList<T> {
...
}
public abstract class B extends A<String> {
...
}
会很好用的。虽然我认为你可以想出一个更好的解决办法。您有关于您的问题的更多详细信息吗?不确定您想做什么,但如果我理解正确,您需要一个扩展ArrayList并具有一般类型字符串的类。。。也许你正在寻找这个:
public abstract class A<T> extends ArrayList<T> {
...
}
public abstract class B extends A<String> {
...
}
会很好用的。虽然我认为你可以想出一个更好的解决办法。关于您的问题,您有更多的细节吗?如果您扩展泛型类,您应该关心泛型。我的意思是你的声明应该是
public abstract class A extends ArrayList<String> {
...
}
这就是“奇怪”行为的原因
顺便问一下,为什么要扩展
ArrayList
?听起来真的很奇怪 如果您扩展泛型类,您应该关心泛型。我的意思是你的声明应该是
public abstract class A extends ArrayList<String> {
...
}
这就是“奇怪”行为的原因
顺便问一下,为什么要扩展ArrayList
?听起来真的很奇怪 天哪,这太可怕了:
public abstract class B<String> extends A {
@Override
public Iterator<String> iterator() {
return super.iterator();
}
}
公共抽象类B扩展了{
@凌驾
公共迭代器迭代器(){
返回super.iterator();
}
}
String
不是类String
,相反,您正在声明一个名为String
(如T
)的新类型变量,该变量隐藏类String
OMG这很糟糕:
public abstract class B<String> extends A {
@Override
public Iterator<String> iterator() {
return super.iterator();
}
}
公共抽象类B扩展了{
@凌驾
公共迭代器迭代器(){
返回super.iterator();
}
}
String
不是类String
,相反,您正在声明一个名为String
(如T
)的新类型变量,该变量通常隐藏类String
,您应该()。为什么首先要扩展ArrayList
?您的意思是,在for循环中,s的类型是Object而不是String?通常您应该()。为什么首先要扩展ArrayList
?你的意思是在for循环中,s的类型是Object而不是String?谢谢,这就是我要做的。不过,您建议使用什么来代替呢?@Aleksandar,我想我只是不明白抽象基类(A
在本例中)的用途。你能详细介绍一下吗?谢谢,这就是我想做的。不过,您建议使用什么来代替呢?@Aleksandar,我想我只是不明白抽象基类(A
在本例中)的用途。你能详细介绍一下吗?