java——除了new,你还会用supplier创建对象吗?

简介: java——除了new,你还会用supplier创建对象吗?

一、官方给的接口

使用FunctionalInterface注解修饰接口,只有一个get方法

@FunctionalInterface
public interface Supplier<T> {
    /**
     * Gets a result.
     *
     * @return a result
     */
    T get();
}

二、解析

如下列代码所示:

使用Supplier创建对象,语法结构:

无参数:

1. Supplier<T> instance = T::new;

2. Supplier<T> instance = () -> new T();

有参数:

1. Function<String, T> fun = T::new;

   fun.apply("test");

2. Function<String, T> fun2 = str -> new T(str);

   fun2.apply("test2");

注:每次调用get方法都会创建一个对象,下面的代码中调用了两次get方法,打印的hashcode是不一样的!

public class TestSupplier {
  public static void main(String[] args) {
    //无参数1:
    Supplier<TestSupplier> sup = TestSupplier::new;
    sup.get();
    sup.get();
    //无参数2:
    Supplier<TestSupplier> sup2 = () -> new TestSupplier();
    sup2.get();
    sup2.get();
    //有参数1:
    Function<String, TestSupplier> fun = TestSupplier::new;
    fun.apply("test");
    //有参数2:
    Function<String, TestSupplier> fun2 = str -> new TestSupplier(str);
    fun2.apply("test2");
  }
  public TestSupplier() {
    System.out.println(this.hashCode());
  }
  public TestSupplier(String str) {
    System.out.println(this.hashCode() + ",参数:" + str);
  }
}
相关文章
|
6月前
|
Java
【Java基础面试三十二】、new String(“abc“) 是去了哪里,仅仅是在堆里面吗?
这篇文章解释了Java中使用`new String("abc")`时,JVM会将字符串直接量"abc"存入常量池,并在堆内存中创建一个新的String对象,该对象会指向常量池中的字符串直接量。
|
9月前
|
设计模式 Java
Java中创建对象的方式
Java中创建对象的方式
69 5
|
9月前
|
存储 监控 Java
深入探索Java语言的NIO(New I/O)技术
深入探索Java语言的NIO(New I/O)技术
|
9月前
|
存储 Java 编译器
【Java开发指南 | 第八篇】Java变量、构造方法、创建对象
【Java开发指南 | 第八篇】Java变量、构造方法、创建对象
105 3
|
9月前
|
Java
【专栏】Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
101 4
|
5月前
|
Java API 调度
掌握Java线程状态:从NEW到TERMINATED
本文探讨了操作系统与Java中线程的状态及其转换。操作系统层面,线程状态包括初始、就绪、运行、阻塞和终止。Java线程状态则细分为NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,并详细介绍了各状态的特性和转换条件。此外,还列举了Java中常用的线程方法,如`wait()`、`notify()`、`start()`和`join()`等,帮助理解线程控制机制。
203 3
掌握Java线程状态:从NEW到TERMINATED
|
6月前
|
Java
【Java基础面试二十八】、使用字符串时,new和““推荐使用哪种方式?
这篇文章讨论了在Java中使用字符串时,推荐使用双引号`""`直接量方式而不是使用`new`操作符,因为`new`会在常量池之外额外创建一个对象,导致更多的内存占用。
|
8月前
|
Java
Java创建对象有几种方式
Java创建对象有几种方式
42 1
|
7月前
|
Java
Java之file,创建文件,File f1 = new File(“E:\\itcast\\java.txt“),先f1定路径,在f1.createNewFile()就能够创建文件,mkdir目录
Java之file,创建文件,File f1 = new File(“E:\\itcast\\java.txt“),先f1定路径,在f1.createNewFile()就能够创建文件,mkdir目录
|
8月前
|
Java
java反射-使用Class对象创建对象
java反射-使用Class对象创建对象
112 0