注:文章皆为个人纪录,可用性请以最终结果为准,若有错还请大佬们指出,谢谢!
注:为了方便与极简化,本文中的外部类与接口我都声明在同一个文件中,与常规写法几乎无异!
在工作中我们有时候需要临时建一个JavaBean用作业务代码处理,写在外部的话很麻烦。
本文用示例说明(写法依次简化)
普通类:声明在外部类外(即新建的一个类)
静态内部类:声明在外部类中(当前类中)
局部内部类:声明在函数中(当前类的函数中)
匿名内部类:没有类名
lambda表达式:极简化
五种方法结合实现函数式接口,讲解内部类的使用及其差别:
< 函数式接口:只拥有一个抽象方法的接口叫做函数式接口 >
package com.example.innerclass;
/**
* 内部类(普通类、静态内部类、局部内部类、匿名内部类、lambda)
*/
public class test {
public static void main(String[] args) {
FunctionClass functionClass = new FunctionClass();
functionClass.fun(" -- 普通类");
FunctionClass2 functionClass2 = new FunctionClass2();
functionClass2.fun(" -- 静态内部类");
// 3. 局部内部类(如果要调用该类,必须要在声明之后调用,就像用局部变量一样)
class FunctionClass3 implements Function {
@Override
public void fun(String param) {
System.out.println("hello" + param);
}
}
FunctionClass3 functionClass3 = new FunctionClass3();
functionClass3.fun(" -- 局部内部类");
// 4. 匿名内部类(无类名)
Function functionClass4 = new Function(){
@Override
public void fun(String test) {
System.out.println("hello" + test);
}
};
functionClass4.fun(" -- 匿名内部类");
// 5. lambda (只有一个入参时,数据类型与括号皆可省略,lambda会自动根据上下文判定:param -> System.out.println("hello" + param);)
Function functionClass5 = (String param) -> System.out.println("hello" + param);
functionClass5.fun(" -- lambda");
}
// 2. 静态内部类
static class FunctionClass2 implements Function{
@Override
public void fun(String param) {
System.out.println("hello" + param);
}
}
}
// 函数式接口
interface Function {
void fun(String param);
}
// 1. 普通类实现接口的方式
class FunctionClass implements Function {
@Override
public void fun(String param) {
System.out.println("hello" + param);
}
}
控制台响应:
hello -- 普通类
hello -- 静态内部类
hello -- 局部内部类
hello -- 匿名内部类
hello -- lambda