use*_*978 21 java generics interface
理想情况下,它看起来像这样(上下文无关紧要):
public interface myInterface extends Iterable<Point>, Iterable<Segment> { ... }
Run Code Online (Sandbox Code Playgroud)
但这在Java中是不允许的.我怎样才能实现这种行为?
Grz*_*Żur 19
不幸的是你不能.在Java中,您不能使用以下签名的两种方法:
Iterator<Point> iterator();
Iterator<Segment> iterator();
Run Code Online (Sandbox Code Playgroud)
在一个类或接口中.
Arn*_*ter 16
正如其他人之前所说,这是不可能的.更好地使用委托而不是像这样的多个实现:
public interface MyInterface {
Iterable<Point> points();
Iterable<Segment> segments();
}
Run Code Online (Sandbox Code Playgroud)
所以,你可以循环使用为:
MyInterface my = ...;
for (Point p : my.points()) {
...
}
for (Segment s : my.segments()) {
...
}
Run Code Online (Sandbox Code Playgroud)
你不能.由于类型擦除,在字节码中,因此在运行时,Iterable<Whatever>变为Iterable.
因此,在运行时,您的类的原型将是:
public interface myInterface extends Iterable, Iterable { ... }
Run Code Online (Sandbox Code Playgroud)
考虑到这一点,您如何确定要迭代的类?
作为一种可能的解决方法,您可以为所需的迭代创建接口.
public interface SegmentIterable{
public Iterator<Segment> segmentIterator();
}
public interface PointIterable{
public Iterator<Point> pointIterator();
}
Run Code Online (Sandbox Code Playgroud)
它并不理想,但只要您想要迭代的东西数量有限,就可以通过.
| 归档时间: |
|
| 查看次数: |
3946 次 |
| 最近记录: |