java8接口默认方法二

时间:2021-01-19 20:03:35

使用函数式接口Supplier来实例化接口默认方法,Supplier对于给定的泛型类型产生一个实例,不需要任何参数。

接口:DefaultMethodInterface

package com.ven.java8.defaultmethod.Inteface;

/**
 * jva8接口默认方法
 * @author xiaowen0623
 *
 */
public interface DefaultMethodInterface {
	/**
	 * 接口静态变量
	 */
	public static final String TYPE="JAVA8";
	
	/**
	 * 接口静态变量
	 */
	public static final String ZW="JAVA WEB开发工程师";
	/**
	 * 接口方法
	 * 
	 * @param userName
	 */
	public void execute(String userName);

	/**
	 * 默认方法
	 * 
	 * @param userName
	 */
	default void learn(String userName) {
		System.out.println(userName + "正在学习"+TYPE+"。。。。。。");
	}

	/**
	 * 默认的静态方法
	 * 
	 * @param userName
	 * @return
	 */
	public static String learnStr(String userName) { 
		String result = userName + " " + "是一名"+ZW;
		return result;

	};

}
接口工厂:

package com.ven.java8.defaultmethod.Inteface;

import java.util.function.Supplier;

/**
 * 接口工厂
 * 使用Supplier供应接口产生一个给定泛型的对象
 * @author xiaowen0623
 *
 */
public interface DefaulableFactory {
    
	/**
	 * 通过函数接口Defaulable的实例
	 * @param supplier
	 * @return
	 */
	static DefaultMethodInterface create(Supplier<DefaultMethodInterface> supplier){
		return supplier.get();
	};	
}
Supplier接口源代码:

/*
 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */
package java.util.function;

/**
 * Represents a supplier of results.
 *
 * <p>There is no requirement that a new or distinct result be returned each
 * time the supplier is invoked.
 *
 * <p>This is a <a href="package-summary.html">functional interface</a>
 * whose functional method is {@link #get()}.
 *
 * @param <T> the type of results supplied by this supplier
 *
 * @since 1.8
 */
@FunctionalInterface
public interface Supplier<T> {

    /**
     * Gets a result.
     *
     * @return a result
     */
    T get();
}
测试:
package com.ven.java8.defaultmethod.Inteface.test;

import com.ven.java8.defaultmethod.Inteface.DefaulableFactory;
import com.ven.java8.defaultmethod.Inteface.DefaultMethodImpl;
import com.ven.java8.defaultmethod.Inteface.DefaultMethodInterface;

/**
 * 测试接口默认方法
 * @author xiaowen0623
 *
 */
public class TestFactory {

	public static void main(String[] args) {
		//使用DefaultMethodImpl::new 使用java8新的方法引用方式
		DefaultMethodInterface d = DefaulableFactory.create(DefaultMethodImpl::new);
	    d.execute("xiaowen");
	}
}