java 8 方法引用

2021-08-14 03:48:51 字數 1856 閱讀 6316

如果lambda 表示式的**塊只有一行**,程式就可以省略表示式**塊的花括號,不僅如此,如果只有一行**,還可以使用方法的引用和構造器的引用

下面為四種引用的例項

public

class

function

@functionalinte***ce

inte***ce mytest3

@functionalinte***ce

inte***ce mytest4

public

static

void

main(string args)

};//建立 converter物件 lambda 實現

converter = from->integer.valueof(from);

//方法引用代替lambda 表示式

converter = integer::valueof;

//呼叫converter 實現

int number =converter.converter("5");

system.out.println("整數="+number);

/*** 2、引用特定物件的例項

*///建立 converter物件 lambda 實現

converter = from->"hello world".indexof(from);

//引用特定物件的例項代替lambda 表示式

converter = "hello world"::indexof;

number =converter.converter("wo");

system.out.println("索引="+number);

/***3、引用某類物件的例項方法

*/mytest3 test = (a,b,c)-> a.substring(b, c);

//引用特定物件的例項代替lambda 表示式

/* 引用某類物件的例項方法時注意點:

* 1、函式式介面中被實現的方法的第乙個引數作為呼叫者

* 2、後面的引數全部傳給改引數作為方法

* * */

test = string::substring;

string substring=test.mytest3("hello world", 2, 5);

system.out.println("擷取的字串為="+substring);

/*** 4、引用構造器

*/mytest4 jfmytest4=title-> new jframe(title);

//引用構造器代替lambda 表示式

jfmytest4= jframe::new;

jframe jframe=jfmytest4.win("我的視窗");

system.out.println(jframe);}}

lambda 和匿名內部類的區別和聯絡lambdab表示式是匿名內部類的簡化,因此,可以取代部分匿名內部類。

相同點:

1、都可以直接訪問區域性變數以及外部類的成員變數

2、建立的匿名物件一樣,都可以直接呼叫,從介面中繼承 的預設方法

區別:

1、匿名內部類可以為任意介面建立例項—無論介面中有多少個方法,匿名內部類只需實現即可,lamdba表示式只能為函式式介面建立例項

2、匿名內部類實現的抽象方法中允許呼叫介面的預設方法,當lambda表示式的**塊中不允許呼叫介面中定義的預設方法

java8方法引用

方法引用為lambda的另外一種表現形式,其為 若lambda體的內容中已有方法實現了,我們可以對其使用 方法有引用 其有三種形式 1 物件 例項 方法名 2 類 靜態方法名 3 類例項方法名 第一種形式 例項 方法名 test public void test1 第二種形式,類 靜態方法 test...

java8 方法引用 二 靜態方法引用

一 概念 如果函式式介面的實現恰好是通過呼叫乙個靜態方法來實現,那麼就可以使用靜態方法引用 二 例項 public class staticexample 有引數無返回值 param size public static void con string size 帶有乙個引數乙個返回值 param ...

java8 靜態方法引用

靜態方法引用 如果函式式介面的實現恰好可以通過呼叫乙個靜態方法完成 就可以使用靜態方法引用 只是呼叫 不做其他處理 classname exmaple1 function todo add function.date 2017年9月8日 下午10 39 06 author lelonta versi...