当前位置: 首页 > 知识库问答 >
问题:

如何将内部类写成lambda表达式?

太叔乐家
2023-03-14
 public void actionPerformed(ActionEvent event) {
                
                red.addActionListener(e -> {
                    getContentPane().setBackground(Color.RED);
                });
                green.addActionListener(e -> {
                    getContentPane().setBackground(Color.GREEN);
                });
                blue.addActionListener(e -> {
                    getContentPane().setBackground(Color.BLUE);
                });
                clear.addActionListener(e -> {
                    getContentPane().setBackground(null);
                });
            }

在本期节目中:

package com.IST242Apps;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ColorFrame extends JFrame{
JButton red, green, blue, clear;

public ColorFrame() { //frame parameters
    super("ColorFrame");
    setSize(500,500);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    FlowLayout flo = new FlowLayout();
    setLayout(flo);
    
    //create buttons
    red = new JButton("RED");
    add(red);
    green = new JButton("GREEN");
    add(green);
    blue = new JButton("BLUE");
    add(blue);
    clear = new JButton("CLEAR");
    add(clear);

    //Something starts here -- the inner class?
    ActionListener act = new ActionListener() { // 
         public void actionPerformed(ActionEvent event) { //when button is clicked
                
                red.addActionListener(e -> {
                    getContentPane().setBackground(Color.RED); //make red
                });
                green.addActionListener(e -> {
                    getContentPane().setBackground(Color.GREEN); //make green
                });
                blue.addActionListener(e -> {
                    getContentPane().setBackground(Color.BLUE); //make blue
                });
                clear.addActionListener(e -> {
                    getContentPane().setBackground(null); //make clear
                });
            }
        };
    //comment: something ends here
        
    //execute lambda expressions
    red.addActionListener(act); 
    green.addActionListener(act);
    blue.addActionListener(act);
    clear.addActionListener(act);
    
    setVisible(true); //make visible
    }
    public static void main(String args[]) {
        new ColorFrame();
    }
}

作为lambda表达式。然而,我对如何实际用lambda表达式替换内部类感到困惑,因为我以前从未这样做过。

如果您也能解释lambda表达式是如何工作的,就像我在W3Schools上看到的那样。

//numbers.foreach(n)->{system.out.println(n);});

    ArrayList<Integer> numbers = new ArrayList<Integer>();
    numbers.add(5);
    numbers.add(9);
    numbers.add(8);
    numbers.add(1);
    numbers.forEach( (n) -> { System.out.println(n); } );

(1)你引用了一些东西。(数字)
(2)表示某种命令。(forEach)
(3)设置参数(n)
(4)表示一些要执行的代码。({system.out.println(n);})
//n只是引用一个不存在的变量吗?

共有1个答案

闾丘选
2023-03-14
ActionListener act = event -> { //when button is clicked

    red.addActionListener(e -> {
        getContentPane().setBackground(Color.RED); //make red
    });
    green.addActionListener(e -> {
        getContentPane().setBackground(Color.GREEN); //make green
    });
    blue.addActionListener(e -> {
        getContentPane().setBackground(Color.BLUE); //make blue
    });
    clear.addActionListener(e -> {
        getContentPane().setBackground(null); //make clear
    });
};
 类似资料:
  • 我在JavaFX上有一个应用程序。在这个应用程序中,我需要实现专栏的编辑器。在旧版本中,该代码运行良好: 但是当我试图用lambda重写代码时 我得到一个错误:错误:java:不兼容的类型:lambda表达式中的不兼容参数类型告诉我如何指定lambda表达式的类型?

  • 目前我学习Springboot。 在这个代码中 我知道这是lambda表达式,但我没有得到原始代码。这不是我的代码。你能让我知道原始代码吗?

  • 问题内容: 如果我列出两个函数列表: 为什么名单,并没有保存的行为方式? 例如: 问题答案: 从技术上讲,lambda表达式是在全局范围(最后设置为9)中可见的那一端 关闭的 。在所有10个lambda中都引用 相同的内容 。例如, __ 在函数中,lambda在调用函数时关闭。那是十个 不同 的。

  • 问题内容: 我想了一下,想到了一个有趣的问题,假设我们有一个配置(输入)文件,其中: 此外,我们还有s 的列表: 有没有办法将s(等)转换为代表lambda表达式的s?然后可以用作: 我将如何编写这样的方法? 我可以从JDK / JRE中重用吗? 我需要自己编写所有内容吗? 是否有可能将范围缩小到仅捕获lambda的其他内容? 问题答案: 马可对这个问题的评论是正确的。您无法从文件中读取裸Java

  • 我在Java 1.8中有以下代码。 如果没有lambda,如何将其转换为Java 1.7代码?

  • 我在这里有一段代码,基本上只是创建一个等于参数的线程数,在每个线程中实例化一个MyRunnable对象,将线程添加到线程列表中,然后根据for循环的迭代设置线程的名称。 我的问题是,有没有更干净的方法?是否可以使用流将此功能封装在lambda中?