更新時(shí)間:2022-12-06 11:09:42 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1610次
在這篇文章中,我們將討論雙冒號運(yùn)算符(::)在Java 8和場景的操作員可以使用。
Lambdas表達(dá)式,我們看到,代碼可以變得非常簡潔。
例如,要?jiǎng)?chuàng)建一個(gè)比較器,以下語法就足夠了:
Comparator c = (Computer c1, Computer c2) -> c1.getAge().compareTo(c2.getAge());
然后,類型推斷:
Comparator c = (c1, c2) -> c1.getAge().compareTo(c2.getAge());
但我們能讓上面的代碼更加富有表現(xiàn)力和可讀嗎?讓我們看一看:
Comparator c = Comparator.comparing(Computer::getAge);
我們使用:運(yùn)營商作為λ速記調(diào)用一個(gè)特定的方法——的名字。最后,結(jié)果當(dāng)然是更可讀語法。
非常簡單地說,當(dāng)我們使用一個(gè)方法參考——目標(biāo)參考前放置分隔符::方法的名稱后提供。
例如:
Computer::getAge;
我們正在尋找一個(gè)方法參考方法getAge計(jì)算機(jī)類中定義。
我們可以操作的函數(shù):
Function<Computer, Integer> getAge = Computer::getAge;
Integer computerAge = getAge.apply(c1);
請注意,我們引用函數(shù),然后將它應(yīng)用到合適的參數(shù)。
我們可以好好利用這個(gè)運(yùn)營商相當(dāng)一段場景。
(1)靜態(tài)方法
首先,我們將使用一個(gè)靜態(tài)的實(shí)用方法:
List inventory = Arrays.asList(
new Computer( 2015, "white", 35), new Computer(2009, "black", 65));
inventory.forEach(ComputerUtils::repair);
(2)現(xiàn)有對象的一個(gè)實(shí)例方法
接下來,讓我們看一看一個(gè)有趣的場景——現(xiàn)有對象實(shí)例的引用一個(gè)方法。
Computer c1 = new Computer(2015, "white");
Computer c2 = new Computer(2009, "black");
Computer c3 = new Computer(2014, "black");
Arrays.asList(c1, c2, c3).forEach(System.out::print);
(3)一個(gè)實(shí)例方法的任意一個(gè)特定類型的對象
Computer c1 = new Computer(2015, "white", 100);
Computer c2 = new MacbookPro(2009, "black", 100);
List inventory = Arrays.asList(c1, c2);
inventory.forEach(Computer::turnOnPc);
如你所見,我們引用turnOnPc方法而不是一個(gè)具體的實(shí)例,但是在類型本身。
在4號線實(shí)例方法turnOnPc將呼吁每個(gè)對象的庫存。
這自然意味著c1 - turnOnPc方法將被稱為計(jì)算機(jī)實(shí)例和c2 MacbookPro實(shí)例上。
(4)一個(gè)超級某個(gè)特定對象的方法
假設(shè)你有以下方法在計(jì)算機(jī)超類:
public Double calculateValue(Double initialValue) {
return initialValue/1.50;
}
這一個(gè)在MacbookPro子類:
@Override
public Double calculateValue(Double initialValue){
Function<Double, Double> function = super::calculateValue;
Double pcValue = function.apply(initialValue);
return pcValue + (initialValue/10) ;
}
調(diào)用calculateValue方法MacbookPro實(shí)例:
macbookPro.calculateValue(999.99);
也會(huì)產(chǎn)生也在電腦上調(diào)用calculateValue超類。
(1)創(chuàng)建一個(gè)新的實(shí)例
引用一個(gè)構(gòu)造函數(shù)實(shí)例化一個(gè)對象可以很簡單:
@FunctionalInterface
public interface InterfaceComputer {
Computer create();
}
InterfaceComputer c = Computer::new;
Computer computer = c.create();
如果你在一個(gè)構(gòu)造函數(shù)有兩個(gè)參數(shù)嗎?
BiFunction<Integer, String, Computer> c4Function = Computer::new;
Computer c4 = c4Function.apply(2013, "white");
如果參數(shù)是三個(gè)或更多,你必須定義一個(gè)新功能界面:
@FunctionalInterface
interface TriFunction<A, B, C, R> {
R apply(A a, B b, C c);
default <V> TriFunction<A, B, C, V> andThen( Function<? super R, ? extends V> after) {
Objects.requireNonNull(after);
return (A a, B b, C c) -> after.apply(apply(a, b, c));
}
}
然后,初始化您的對象:
TriFunction <Integer, String, Integer, Computer> c6Function = Computer::new;
Computer c3 = c6Function.apply(2008, "black", 90);
(2)創(chuàng)建一個(gè)數(shù)組
最后,讓我們看看如何創(chuàng)建計(jì)算機(jī)對象數(shù)組和五個(gè)要素:
Function <Integer, Computer[]> computerCreator = Computer[]::new;
Computer[] computerArray = computerCreator.apply(5);
以上就是關(guān)于“Java8中的雙冒號運(yùn)算符”的介紹,大家如果想了解更多相關(guān)知識,可以關(guān)注一下本站的Java教程,里面還有更豐富的知識等著大家去學(xué)習(xí),希望對大家能夠有所幫助。
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743