import java.util.*;
class  CollectionsDemo
{
public static void main(String[] args) 
{
System.out.println("Hello World!");
sortDemo();
}
public static void sortDemo()
{
List<String> list = new ArrayList<String>();
list.add("dsa");
list.add("dss");
list.add("dssas");
list.add("dsada");
list.add("dssa");
list.add("dsdas");
list.add("dswa");
sop(list);
LengthComparator it=  new LengthComparator();
Collections.sort(list, it);
sop(list); }
public static void sop(List list)
{
System.out.println(list);
}
class LengthComparator implements Comparator<String>
{
public int compare(String s1,String s2)
{
if(s1.length()>s2.length())
return 1;
 if(s1.length()<s2.length())
return -1;
 
return s1.compareTo(s2);
}

}
}
为什么这个程序编译不通过啊 ???这是提示
CollectionsDemo.java:20: 错误: 无法从静态上下文中引用非静态 变量 this
                LengthComparator it=  new LengthComparator();

解决方案 »

  1.   

    LengthComparator 为非静态内部类, 可以在LengthComparator 前加 static
      

  2.   

    LengthComparator是非静态内部类,只能被非静态成员方法访问
    将LengthComparator类变为静态的就可以了
    static class LengthComparator implements Comparator<String>
        {......}
    希望可以帮到你
      

  3.   

    错误原因:内部类不能直接new
    解决方法一: 将内部类LengthComparator拿到CollectionsDemo类外面 简单粗暴,推荐!
    解决方法二: LengthComparator it = new CollectionsDemo().new LengthComparator(); 使用这条代码new内部类
    解决方法三: 如前面的朋友所说 CollectionsDemo类前加static关键字 用 CollectionsDemo.LengthComparator it = new LengthComparator(); new内部类
      

  4.   

    是LengthComparator类前加static关键字  即static class LengthComparator implements Comparator<String>
      

  5.   

    import java.util.*;
    class  CollectionsDemo
    {
    public static void main(String[] args) 
    {
    System.out.println("Hello World!");
    sortDemo();
    }
    public static void sortDemo()
    {
    List<String> list = new ArrayList<String>();
    list.add("dsa");
    list.add("dss");
    list.add("dssas");
    list.add("dsada");
    list.add("dssa");
    list.add("dsdas");
    list.add("dswa");
    sop(list);
    LengthComparator it=  new CollectionsDemo().new LengthComparator();//因为LengthComparator为CollectionsDemo的内部类
    Collections.sort(list, it);
    sop(list);
    }
    public static void sop(List list)
    {
    System.out.println(list);
    }
    class  LengthComparator implements Comparator<String>
    {
    public int compare(String s1,String s2)
    {
    if(s1.length()>s2.length())
    return 1;
     if(s1.length()<s2.length())
    return -1;
     
     return s1.compareTo(s2);
    } }
    }
      

  6.   

    内部类可以看作外部类的一个成员,你这个成员是非静态的成员当然无法被调用,在这个成员前面加static,静态不能调用非静态,静态只能调用静态
      

  7.   

    package D;import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;public class C {

    public static void main(String[] args) {
    System.out.println("Hello World!");
     sortDemo();
    }public static void sortDemo() {
    List<String> list = new ArrayList<String>();
    list.add("dsa");
    list.add("dss");
    list.add("dssas");
    list.add("dsada");
    list.add("dssa");
    list.add("dsdas");
    list.add("dswa");
    sop(list);
    LengthComparator it = new LengthComparator();
    Collections.sort(list, it);
    sop(list);}public static void sop(List list) {
    System.out.println(list);
    }}
    class LengthComparator implements Comparator<String> {
    public int compare(String s1, String s2) {
    if (s1.length() > s2.length())
    return 1;
    if (s1.length() < s2.length())
    return -1;

    return s1.compareTo(s2);
    }

    }