interface Selector{
boolean end();
Object current();
void next();
}public class TestParcel8{
private Object[] o;
private int next = 0;
public TestParcel8(int size){
o = new Object[size];
}
public void add(Object x){
if(next < o.length){
o[next] = x;
next++;
}
}
private class SSelector implements Selector{
int i = 0;
public boolean end(){
return i == o.length;
}
public Object current(){
return o[i];
}
public void next(){
if(i < o.length)i++;
}
}
public Selector getSelector(){
return new SSelector();
}
public static void main(String args[]){
TestParcel8 t = new TestParcel8(10);
for(int i=0;i<10;i++){
t.add(Integer.toString(i));
}
Selector s = t.getSelector();
while(!s.end()){
System.out.println((String)s.current());
s.next();
}
}
}javac一下,产生4个class文件,分别是:
Selector.class
TestParcel8$1.class   //请问这个文件怎么产生的?
TestParcel8$SSelector.class  //这个应该是内部类SSelector编译时产生的class文件
TestParcel8.class

解决方案 »

  1.   


        public Selector getSelector(){
            return new SSelector();
        }测试了一下,是这句导致了TestParcel8$1.class产生,去掉以后就没有TestParcel8$1.class了。
    具体情况还不清楚,等待高人来解答
      

  2.   

    反编译看了一下,也没啥端倪;
    反编译出来TestParcel8$1.class是空的;
      

  3.   

    TestParcel8$1.class是匿名内部类产生的
      

  4.   

    内部类都是以这样类名的 XXXX$YYYY.class 的,表示 YYYY 是 XXXX 的内部类。但由于匿名内部类没有类名,编译之后就会产生 XXXX$1.class 的文件,从 1 开始编号。如果匿名类中还有个匿名类,则会产生 XXXX$1$1.class 的文件。
      

  5.   

    我测试了下,只产生了三个文件,
    Selector.class
    TestParcel8$SSelector.class
    TestParcel8.class没有 TestParcel8$1.class 。我使用的jdk是1.6的。我怀疑这个TestParcel8$1.class并不是这个java文件产生的,请楼主删掉这些.class文件,重新编译看下。
      

  6.   

    我测试了下,只产生了三个文件,
    Selector.class
    TestParcel8$SSelector.class
    TestParcel8.class没有 TestParcel8$1.class 。我使用的jdk是1.6的。我怀疑这个TestParcel8$1.class并不是这个java文件产生的,请楼主删掉这些.class文件,重新编译看下。