JAVA学习日记: Lambda表达式(4)

今天学习了的主要内容:

1.泛型函数式接口
2.标记接口类型变量赋值

泛型函数式接口:

	Lambda表达式可以赋值给泛型函数式接口类型的变量。
	禁止将Lambda表达式赋值给那些带有泛型方法、但不是泛型类型的函数式接口类型变量。这点只能通过方法引用或匿名内部类来解决。

标记接口类型变量赋值:

	使用 & 将标记接口与函数式接口进行连接,组成交际类型,再赋值即可。

LambdaTest05类(测试泛型函数式接口):

package LessonForLambda04;

@FunctionalInterface
interface Functionalable1
{
    
    
	//函数式接口中可以有Object类的方法。
	void getInfor1();
	boolean equals(Object obj);
	String toString();
}

@FunctionalInterface
interface Functionalable2<T>
{
    
    
	T getInfor2(T t);
}

@FunctionalInterface
interface Functionalable3
{
    
    
	<T> T getInfor3(T t);//函数式接口中只有一个泛型方法,但是接口不是泛型
}

public class LambdaTest05 
{
    
    
	public static void main (String args[])
	{
    
    
		Functionalable2<String> f21 = t->{
    
    return t.concat("zlm");};
		System.out.println(f21.getInfor2("wualalalal"));
		
		System.out.println("---------");
		//函数式接口中只有一个泛型方法,但是接口不是泛型	
		//Functionalable3 f31 = t->{return t.concat("zlm");};这样写就报错了
		
	}
}

MarkedInterDemo类(测试标记接口类型变量赋值):

package LessonForLambda04;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
//标记接口中没有任何方法
interface MarkedInterf
{
    
    
	
}

@FunctionalInterface
interface MyFuncInterf
{
    
    
	void method();
}

@FunctionalInterface
interface MyFuncInterf2
{
    
    
	int method(int a, int b);
}

public class MarkedInterDemo 
{
    
    
	public static void main(String[] args) 
	{
    
    
		//使用&将标记接口与函数式接口进行连接,组成交际类型,再赋值即可。
		MarkedInterf mif1 = (MarkedInterf & MyFuncInterf)()->{
    
    System.out.println("WDNMD");};
		
		MyFuncInterf2 mfi1 = (int a, int b)->{
    
    return a+b;};
		MarkedInterf mif2 = (MarkedInterf & MyFuncInterf2)(int a, int b)->{
    
    return a+b;};
		System.out.println(mfi1.method(1, 2));
		
		Class<?> c1 = MyFuncInterf2.class;
		try 
		{
    
    
			Method m1 = c1.getMethod("method",int.class,int.class);
			int a = (int)m1.invoke(mif2,1,2);
			System.out.print(a);
		} catch (NoSuchMethodException | SecurityException | IllegalAccessException | 
				IllegalArgumentException | InvocationTargetException e)
			{
    
    
				e.printStackTrace();
			}
		
	}

}

本篇文字来源于:
	咕嘟咖啡杨海滨老师 — 《java编程语言高级特性》
	在这里十分感谢老师能够给我带来学习的激情。

2020.10.19
可以转载我的学习日记但请注明出处,谢谢。
本文章是本人学习笔记,不进行任何商用!只为记录本人学习历程。
毕	

猜你喜欢

转载自blog.csdn.net/SIESTA030/article/details/109166676