Java新手提问:匿名类实现Runnable的代码形式是怎样的?
关于匿名类实现Runnable的完整形式解析
嘿,作为Java新手完全不用拘谨呀!我来给你把匿名类实现Runnable的完整逻辑拆解得明明白白~
你代码里用的new Runnable() { ... }就是匿名内部类的写法,它本质是创建一个实现了Runnable接口的类的实例,只是这个类没有单独的类名,直接在代码里完成定义+实例化的操作。
先看完整的“非匿名”实现形式
如果把这个匿名类拆成普通的命名类,完整的实现逻辑是这样的:
// 第一步:定义一个实现Runnable接口的命名类 class LibraryInitRunnable implements Runnable { // 必须重写Runnable接口唯一的抽象方法run() @Override public void run() { try { Library.frame = new Library(); Library.frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } } // 第二步:在main方法中使用这个类 public class Library extends JFrame { static Library frame; private JPanel contentPane; public static void main(String[] args) { EventQueue.invokeLater(new LibraryInitRunnable()); } }
对应到你的匿名类写法
你代码里的匿名类写法,其实是把上面的命名类定义和实例化合并成了一步,省去了给类起名字的环节,展开来看的完整匿名类结构就是你写的这样(核心就是把命名类的内容直接塞进new Runnable()后的大括号里):
EventQueue.invokeLater(new Runnable() { // 强制重写Runnable的run()方法 @Override public void run() { try { frame= new Library(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } });
额外补充个简化写法
因为Runnable是函数式接口(只有一个抽象方法),你还可以用更简洁的Lambda表达式替代匿名类,功能完全一致:
EventQueue.invokeLater(() -> { try { frame= new Library(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } });
内容的提问来源于stack exchange,提问作者Squeez
相关产品推荐
相关产品推荐

