当前位置: 首页 > 编程笔记 >

如何在Java中使用一个或多个参数实现构造函数引用

壤驷志学
2023-03-14
本文向大家介绍如何在Java中使用一个或多个参数实现构造函数引用,包括了如何在Java中使用一个或多个参数实现构造函数引用的使用技巧和注意事项,需要的朋友参考一下

方法引用也可以适用于Java 8中的构造函数。可以使用类名和new关键字创建构造函数引用。 可以将构造函数引用分配给任何定义与该构造函数兼容的方法的功能接口引用。

语法

<Class-Name>::new

具有一个参数的构造函数引用示例

import java.util.function.*;
@FunctionalInterfaceinterface 
MyFunctionalInterface {
   Student getStudent(String name);
}
public class ConstructorReferenceTest1 {
   public static void main(String[] args) {
      MyFunctionalInterface mf = Student::new;

      Function<Sttring, Student> f1 = Student::new;    // 构造函数引用      
      Function<String, Student> f2 = (name) -> new Student(name);
      System.out.println(mf.getStudent("Adithya").getName());
      System.out.println(f1.apply("Jai").getName());
      System.out.println(f2.apply("Jai").getName());
   }
}
// Student class
class Student {
   private String name;
   public Student(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
}

输出结果

Adithya
Jai
Jai

具有两个参数的构造函数引用示例

import java.util.function.*;
@FunctionalInterfaceinterface 
MyFunctionalInterface {
   Student getStudent(int id, String name);
}
public class ConstructorReferenceTest2 {
   public static void main(String[] args) {
      MyFunctionalInterface mf = Student::new;    //构造函数引用      
      BiFunction<Integer, String, Student> f1 = Student::new;
      BiFunction<Integer, String, Student> f2 = (id, name) -> new Student(id,name);

      System.out.println(mf.getStudent(101, "Adithya").getId());
      System.out.println(f1.apply(111, "Jai").getId());
      System.out.println(f2.apply(121, "Jai").getId());
   }
}
// Student class
class Student {
   private int id;
   private String name;
   public Student(int id, String name) {
      this.id = id;
      this.name = name;
   }
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
}

输出结果

101
111
121
 类似资料:
  • 在创建接受多个一维数组的构造函数时遇到困难: 我一直得到多个错误--标记的语法错误,错位的构造--类型不匹配:无法从字符串[]转换为关系--标记“}”的语法错误,删除此标记--标记“)”的语法错误,}预期 我需要能够单独使用每个数组与关系类。

  • 问题内容: 是否可以从另一个(在同一类中,而不是在子类中)调用构造函数?如果是,怎么办?调用另一个构造函数的最佳方法是什么(如果有几种方法可以做到)? 问题答案: 对的,这是可能的: 要链接到特定的超类构造函数而不是同一类中的构造函数,请使用代替。注意,你只能链接到一个构造函数,它必须是构造函数主体中的第一条语句。

  • 问题内容: 这是面试中提出的问题。如果一个类在Java中何时有多个构造函数,我们可以从另一个构造函数调用另一个函数吗? 问题答案: 可以,我知道的语法是 您还可以通过以下方式调用超类的构造函数 这两个调用只能作为构造函数中的第一条语句完成(因此,您只能在执行其他任何操作之前调用另一个构造函数)。

  • 我有一个 Scala 类,它使用 Apache Spark 中的 MR 作业返回输入类型 IN 的最大值。如果我从Scala调用它,这个类工作正常,它的工作原理如下: 现在我想让它也可以从java中调用,但是我在传递隐式参数时遇到了一些困难。我知道隐式参数可以通过在Java中将它们追加到参数列表中来传递,但是隐式参数是在Scala中。因此,我正在努力做到以下几点: 然后可以从java调用: 我尝试

  • 我编写了以下代码和驱动程序,但我不知道如何使用两个构造函数创建银行账户对象。一个构造函数获取初始余额,第二个构造函数在没有钱的情况下开设账户。此外,Account tBalance是否应该包括有效性检查? 或者,我可以执行以下操作: 将费用作为描述银行账户的一部分。根据需要更新BankAccount类。用户应该能够为每个帐户设置费用金额,并通过一种方法添加费用。向驱动程序添加代码以演示费用功能。(

  • 我的问题是关于OOP(C)中的构造函数。当我在一个类中将默认构造函数定义为private,并且在main中将该类的一个对象初始化为default时,就会出现默认构造函数不可访问的错误。这很好。但我也在Public部分中使用默认参数构造函数,当我再次在main中初始化对象时,就会出现对函数重载的不明确调用。所以我的问题是,如果不能从main访问私有构造函数,那么编译器应该调用公共部分中的构造函数,这