java方法引用::

简介: java方法引用::

一、通过对象名来引用方法

对象::成员方法

对象和方法已经存在了可以使用

public class MethodreObjedg {
    public  void print_up_string(String s){
        System.out.println(s.toUpperCase());
    }
}


public interface Printable {
    void pirnt(String s);
}
private static void showpitn(Printable pr) {
        pr.pirnt("hello,world");
    }
MethodreObjedg objedg = new MethodreObjedg();
showpitn(objedg::print_up_string);

二、通过类名引用静态成员方法

类名::静态成员方法

@FunctionalInterface
public interface Calcable {
    public  abstract int cal_abs(int number);
}
public class demo{
    public static void main(String[] args) {
        System.out.println(method(-1, (number) -> Math.abs(number)));
        System.out.println(method(-2, Math::abs));
    }
    public static  int method(int number,Calcable cal){
        return cal.cal_abs(number);
    }
}

三、通过super引用父类的成员方法

super::方法名

函数接口

@FunctionalInterface
public interface Greetable {
    public abstract void greet();
}

父类

public class Human {
    public void say(){
        System.out.println("hello,Human");
    }
}

子类

public class Persion extends Human {
    @Override
    public void say() {
        System.out.println("hello,Persion");
    }
    public void method(Greetable g){
        g.greet();
    }
    public void show(){
        method(()->{
            Human human = new Human();
            human.say();
        });
        method(super::say);
    }
 
    public static void main(String[] args) {
        Persion persion = new Persion();
        persion.show();
    }
}

四 通过this引用本类的成员方法

this::方法名

@FunctionalInterface
public interface Greetable {
    public abstract void greet();
}
public class green_test {
    public void method(Greetable greetable) {
        greetable.greet();
    }
 
    public void say() {
        System.out.println("我是本类方法");
    }
 
    public void show() {
        method(this::say);
    }
 
    public static void main(String[] args) {
      new green_test().show();
    }
}

五 通过类的构造器引用

类名::new

public class Persion {
    private String name;
 
    public Persion() {
    }
 
    public Persion(String name) {
        this.name = name;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}
@FunctionalInterface
public interface PersionBuilder {
public abstract Persion builderpersion(String name);
}
public class demo {
    public static void method(PersionBuilder pb,String name){
      Persion per=pb.builderpersion(name);
        System.out.println(per.getName());
    }
 
    public static void main(String[] args) {
    method((name)->new Persion(name),"张无忌");
    method(Persion::new,"张三丰");
    }
}

六 数组的构造器引用

int[]::new

@FunctionalInterface
public interface Array_build {
    public abstract int[] buildarray(int number);
}
public class demo_arraybuild {
    public static int[] createint(Array_build ab,int num){
        return ab.buildarray(num);
    }
    public static void main(String[] args) {
        int[] arr1 = createint((number) -> new int[ number], 5);
        int[] arr2 = createint(int[]::new, 5);
        System.out.println(Arrays.toString(arr1));
        System.out.println(Arrays.toString(arr2));
 
 
    }
}

相关文章
|
14天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
54 4
|
24天前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
45 17
|
18天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
34 2
|
1月前
|
算法 Java Linux
java制作海报二:java使用Graphics2D 在图片上合成另一个照片,并将照片切割成头像,头像切割成圆形方法详解
这篇文章介绍了如何使用Java的Graphics2D类在图片上合成另一个照片,并将照片切割成圆形头像的方法。
49 1
java制作海报二:java使用Graphics2D 在图片上合成另一个照片,并将照片切割成头像,头像切割成圆形方法详解
|
26天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
19 3
|
28天前
|
Java 大数据 API
别死脑筋,赶紧学起来!Java之Steam() API 常用方法使用,让开发简单起来!
分享Java Stream API的常用方法,让开发更简单。涵盖filter、map、sorted等操作,提高代码效率与可读性。关注公众号,了解更多技术内容。
|
26天前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
16 2
|
26天前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
17 1
|
26天前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
31 1
|
26天前
|
Java
在Java多线程编程中,`wait()`和`notify()`方法的相遇如同一场奇妙的邂逅
在Java多线程编程中,`wait()`和`notify()`方法的相遇如同一场奇妙的邂逅。它们用于线程间通信,使线程能够协作完成任务。通过这些方法,生产者和消费者线程可以高效地管理共享资源,确保程序的有序运行。正确使用这些方法需要遵循同步规则,避免虚假唤醒等问题。示例代码展示了如何在生产者-消费者模型中使用`wait()`和`notify()`。
24 1