static与静态类、内部类与外部类

1|0引子

早上想试试java写点题,写重载排序比较接口的时候突然报了一个错误。

No enclosing instance of type demo is accessible. Must qualify the allocation with an enclosing instance of type demo (e.g. x.new A() where x is an instance of demo).

从这个报错可以看出,似乎我的重载接口需要新建一个对象(实例)才能用。

2|0分析

public class Main { public static void solve() throws IOException { Arrays.sort(a, new cmp()); } public static void main(String[] args) throws IOException { } class cmp implements Comparator<Integer> { @Override public int compare(Integer o1, Integer o2) { return o2.compareTo(o1); } } }

cmp是内部类!

原来是因为 cmp 的位置放错了,我在 MAIN 类的内部声明了一个 cmp 类,且这个类是非静态类(不伴随类一起出现,必须有对象才能出现)。所以报了这个错误。

3|0修正

根据问题分析,显然有三种思路。

3|1对象调用

直接创造一个Main对象来调用new cmp()方法。

public class Main { public static void solve() throws IOException { Arrays.sort(a, new Main().new cmp()); } public static void main(String[] args) throws IOException { } class cmp implements Comparator<Integer> { @Override public int compare(Integer o1, Integer o2) { return o2.compareTo(o1); } } }

3|2改静态类

直接把 cmp 类改成静态类,这样就是随类生成能直接被类使用了。

public class Main { public static void solve() throws IOException { Arrays.sort(a, new cmp()); } public static void main(String[] args) throws IOException { } static class cmp implements Comparator<Integer> { @Override public int compare(Integer o1, Integer o2) { return o2.compareTo(o1); } } }

3|3改外部类

没法直接 new 是因为 cmp 是内部类,改成外部类即可。

public class Main { public static void solve() throws IOException { Arrays.sort(a, new cmp()); } public static void main(String[] args) throws IOException { } } class cmp implements Comparator<Integer> { @Override public int compare(Integer o1, Integer o2) { return o2.compareTo(o1); } }

__EOF__

本文作者Kdlyh
本文链接https://www.cnblogs.com/kdlyh/p/17948412.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   加固文明幻景  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示