黑马程序员技术交流社区

标题: 【已解决】内部类不能在类内部实例化么? [打印本页]

作者: pphdsny3    时间: 2012-8-14 18:13
标题: 【已解决】内部类不能在类内部实例化么?
本帖最后由 黑马王鹏 于 2012-8-14 20:09 编辑

这是TreeSet排序的一段代码

port java.util.*;

public class TreeSetTest {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
         TreeSet ts = new TreeSet(new StringLengthComp());//这里会报错,内部类不能在内部被实例么?为什么?
               
                ts.add("avaca");
                ts.add("ab");
                ts.add("ess");
                ts.add("zxcs");
               
                Iterator it = ts.iterator();
                while(it.hasNext()){
                        System.out.println(it.next());
                }
        }
        class StringLengthComp implements Comparator{
               
                public int compare(Object o1,Object o2){
                        String s1 = (String)o1;
                        String s2 = (String)o2;
                        
                        return new Integer(s1.length()).compareTo(new Integer(s2.length()));
                }
        }
}
作者: 张扬123    时间: 2012-8-14 18:29
public class TreeSetTest {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
        TreeSet ts = new TreeSet(new StringLengthComp());//这里会报错,内部类不能在内部被实例么?为什么?
               
                ts.add("avaca");
                ts.add("ab");
                ts.add("ess");
                ts.add("zxcs");
               
                Iterator it = ts.iterator();
                while(it.hasNext()){
                        System.out.println(it.next());
                }
        }
        class StringLengthComp implements Comparator{
               
                public int compare(Object o1,Object o2){
                        String s1 = (String)o1;
                        String s2 = (String)o2;
                        
                        return new Integer(s1.length()).compareTo(new Integer(s2.length()));
                }
        }
}
1.你的内部类不是静态的。
2.而main方法是静态的。
3.当外部类中的静态方法访问内部类时,内部类必须也是static的。

作者: 刘润辰    时间: 2012-8-14 18:34
。。。

作者: 张忠豹    时间: 2012-8-14 18:58
本帖最后由 张忠豹 于 2012-8-14 19:00 编辑

package exception;
//建议在引入类的时候,不要用java.util.*,类加载多了影响程序运行
//当然小程序是没有问题的,要是大型项目,问题就会凸现出来了
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetTest {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
  //创建非静态的内部类应该是这样的
  TreeSet ts = new TreeSet(new TreeSetTest().new StringLengthComp());// 这里会报错,内部类不能在内部被实例么?为什么?
  ts.add("avaca");
  ts.add("ab");
  ts.add("ess");
  ts.add("zxcs");
  Iterator it = ts.iterator();
  while (it.hasNext()) {
   System.out.println(it.next());
  }
}
class StringLengthComp implements Comparator {
  public int compare(Object o1, Object o2) {
   String s1 = (String) o1;
   String s2 = (String) o2;
   return new Integer(s1.length()).compareTo(new Integer(s2.length()));
  }
}
}


作者: pphdsny3    时间: 2012-8-14 20:08
张忠豹 发表于 2012-8-14 18:58
package exception;
//建议在引入类的时候,不要用java.util.*,类加载多了影响程序运行
//当然小程序是没 ...

谢谢了,知道问题出在哪了!
作者: pphdsny3    时间: 2012-8-14 20:08
张扬123 发表于 2012-8-14 18:29
public class TreeSetTest {

        /**

嗯..是这样的!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2