【发布时间】:2011-05-05 10:04:03
【问题描述】:
我的代码:
public class MyTest {
public class StringSorter implements Comparator<String>
{
public StringSorter() {}
public int compare(String s1, String s2)
{
int l1 = s1.length();
int l2 = s2.length();
return l1-l2;
}
}
public static void main(String[] args) {
System.out.println("Hello, world!");
StringSorter sorter = new StringSorter();
Set<String> sets = new TreeSet<String>(sorter);
sets.add(new String("he"));
sets.add(new String("hel"));
sets.add(new String("he"));
sets.add(new String("hello"));
for (String s: sets)
{
System.out.println(s);
}
}
}
它会报错: "MyTest.java:41: 不能从静态上下文引用的非静态变量"
删除此行将通过编译。但是,我们在“静态 main”方法中需要许多 String 对象。 String 和 StringSorter 有什么区别?
如果我将 StringSorter 更改为静态内部类,它将被编译好。静态内部类如何修复编译错误?
【问题讨论】:
-
你应该只使用 "he" 而不是 new String("he")
-
为什么?^^ 谢谢你的提醒。
标签: java static inner-classes