我有一个关于Java增强'for'语句的问题:
http://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.14.2
是否有可能对类使用增强的'for'语句? (而不仅仅是对象)
这是一个例子:
import java.util.*;
class MyRecord
{
public String name;
public MyRecord( String name ) {
this.name = name;
}
}
class MyCollection implements Iterable<MyRecord>
{
private static Vector<MyRecord> vec = new Vector<MyRecord>();
public Iterator<MyRecord> iterator() {
return vec.iterator();
}
public static void add( MyRecord rec ) {
vec.add( rec );
}
}
class Test
{
public static void main( String[] args )
{
MyCollection.add( new MyRecord( "first" ) );
MyCollection.add( new MyRecord( "second" ) );
for( MyRecord rec : MyCollection )
System.out.println( rec.name );
}
}
我在'for'中遇到错误:
Test.java: error: cannot find symbol
for( MyRecord rec : MyCollection )
^
symbol: variable MyCollection
如果可能,我想避免创建类MyCollection的实例。
答案 0 :(得分:0)
实际上,您必须将对象的实例传递给for
。如果要阻止创建MyCollection
的多个实例,可以使用单例模式。
class MyCollection implements Iterable<MyRecord>
{
private static Vector<MyRecord> vec = new Vector<MyRecord>();
private static final MyCollection INSTANCE = new MyCollection();
private MyCollection() { /* Hide the constructor */ }
public static MyCollection getInstance() {
return INSTANCE;
}
public Iterator<MyRecord> iterator() {
return vec.iterator();
}
public static void add( MyRecord rec ) {
vec.add( rec );
}
}
从这里开始,您可以修改循环代码以使用单例实例
for( MyRecord rec : MyCollection.getInstance() )
System.out.println( rec.name );
答案 1 :(得分:0)
这个解决方案适合我:
try
{
for( MyRecord rec : MyCollection.class.newInstance() )
System.out.println( rec.name );
}
catch( Exception e )
{
System.out.println( e );
}