🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 构造函数引用 你还可以捕获构造函数的引用,然后通过引用调用该构造函数。 ~~~java // functional/CtorReference.java class Dog { String name; int age = -1; // For "unknown" Dog() { name = "stray"; } Dog(String nm) { name = nm; } Dog(String nm, int yrs) { name = nm; age = yrs; } } interface MakeNoArgs { Dog make(); } interface Make1Arg { Dog make(String nm); } interface Make2Args { Dog make(String nm, int age); } public class CtorReference { public static void main(String[] args) { MakeNoArgs mna = Dog::new; // [1] Make1Arg m1a = Dog::new; // [2] Make2Args m2a = Dog::new; // [3] Dog dn = mna.make(); Dog d1 = m1a.make("Comet"); Dog d2 = m2a.make("Ralph", 4); } } ~~~ **Dog**有三个构造函数,函数式接口内的`make()`方法反映了构造函数参数列表(`make()`方法名称可以不同)。 **注意**我们如何对**\[1\]**,**\[2\]**和**\[3\]**中的每一个使用`Dog :: new`。 这三个构造函数只有一个相同名称:`:: new`,但在每种情况下赋值给不同的接口,编译器可以从中知道具体使用哪个构造函数。 编译器知道调用函数式方法(本例中为`make()`)就相当于调用构造函数。