日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

美图手机投射功能在哪_在Java 8中进行投射(还有其他功能?)

發(fā)布時(shí)間:2023/12/3 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 美图手机投射功能在哪_在Java 8中进行投射(还有其他功能?) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

美圖手機(jī)投射功能在哪

將實(shí)例轉(zhuǎn)換為設(shè)計(jì)不良的類(lèi)型。 盡管如此,在某些情況下沒(méi)有其他選擇。 從第一天開(kāi)始,執(zhí)行此功能就已成為Java的一部分。

我認(rèn)為Java 8提出了對(duì)這種古老技術(shù)稍加改進(jìn)的需求。

靜態(tài)鑄造

Java中最常見(jiàn)的轉(zhuǎn)換方法如下:

靜態(tài)鑄造

Object obj; // may be an integer if (obj instanceof Integer) {Integer objAsInt = (Integer) obj;// do something with 'objAsInt' }

這使用了嵌入到該語(yǔ)言中的instanceof和cast運(yùn)算符。 實(shí)例轉(zhuǎn)換為的類(lèi)型(在這種情況下為Integer在編譯時(shí)必須是靜態(tài)已知的,因此我們將其稱(chēng)為靜態(tài)轉(zhuǎn)換。

如果obj不是Integer ,則上述測(cè)試將失敗。 如果我們嘗試將其強(qiáng)制轉(zhuǎn)換,則會(huì)得到ClassCastException 。 如果obj為null ,則它無(wú)法通過(guò)instanceof測(cè)試,但可以強(qiáng)制轉(zhuǎn)換,因?yàn)閚ull可以是任何類(lèi)型的引用。

動(dòng)態(tài)鑄造

我很少遇到的一種技術(shù)是使用Class上與運(yùn)算符相對(duì)應(yīng)的方法:

動(dòng)態(tài)轉(zhuǎn)換為已知類(lèi)型

Object obj; // may be an integer if (Integer.class.isInstance(obj)) {Integer objAsInt = Integer.class.cast(obj);// do something with 'objAsInt' }

請(qǐng)注意,盡管在此示例中,在編譯時(shí)也知道要強(qiáng)制轉(zhuǎn)換為的類(lèi),但不一定如此:

動(dòng)態(tài)鑄造

Object obj; // may be an integer Class<T> type = // may be Integer.class if (type.isInstance(obj)) {T objAsType = type.cast(obj);// do something with 'objAsType' }

因?yàn)轭?lèi)型在編譯類(lèi)型時(shí)是未知的,所以我們將其稱(chēng)為動(dòng)態(tài)轉(zhuǎn)換。

類(lèi)型和空引用錯(cuò)誤的實(shí)例的測(cè)試和轉(zhuǎn)換結(jié)果與靜態(tài)轉(zhuǎn)換完全相同。

由vankarsten在CC-BY-NC 2.0下發(fā)布 。

在流中投放和可選

現(xiàn)在

轉(zhuǎn)換Optional的值或Stream的元素是一個(gè)兩步過(guò)程:首先,我們必須過(guò)濾掉錯(cuò)誤類(lèi)型的實(shí)例,然后才能將其轉(zhuǎn)換為所需的類(lèi)型。

使用Class上的方法,我們使用方法引用來(lái)實(shí)現(xiàn)。 以O(shè)ptional為例:

強(qiáng)制轉(zhuǎn)換

Optional<?> obj; // may contain an Integer Optional<Integer> objAsInt = obj.filter(Integer.class::isInstance).map(Integer.class::cast);

我們需要兩個(gè)步驟來(lái)執(zhí)行此操作沒(méi)什么大不了的,但我覺(jué)得這有點(diǎn)尷尬,而且比必要時(shí)更冗長(zhǎng)。

未來(lái)(也許)

我建議在Class上實(shí)現(xiàn)返回Optional或Stream強(qiáng)制轉(zhuǎn)換方法。 如果傳遞的實(shí)例類(lèi)型正確,則將返回Optional或包含轉(zhuǎn)換實(shí)例的Singleton Stream 。 否則,兩者都將為空。

實(shí)現(xiàn)這些方法很簡(jiǎn)單:

課堂上的新方法

public Optional<T> castIntoOptional(Object obj) {if (isInstance(obj))return Optional.of((T) obj);elseOptional.empty(); }public Stream<T> castIntoStream(Object obj) {if (isInstance(obj))return Stream.of((T) obj);elseStream.empty(); }

這使我們可以使用flatMap一步進(jìn)行過(guò)濾和轉(zhuǎn)換:

該死的FlatMap

Stream<?> stream; // may contain integers Stream<Integer> streamOfInts = stream.flatMap(Integer.class::castIntoStream);

類(lèi)型錯(cuò)誤或引用為空的實(shí)例將使實(shí)例測(cè)試失敗,并導(dǎo)致空的Optional或Stream 。 永遠(yuǎn)不會(huì)有ClassCastException 。

成本與收益

還需要確定這些方法是否會(huì)發(fā)揮自己的作用:

  • 實(shí)際可以使用多少代碼?
  • 它們會(huì)提高普通開(kāi)發(fā)人員的可讀性嗎?
  • 節(jié)省一行值得嗎?
  • 實(shí)施和維護(hù)它們的成本是多少?

我回答的問(wèn)題不多 , 很少 , 是的 , 很少 。 因此,它接近于零和游戲,但我確信這是一個(gè)很小但不可忽略的收益。

你怎么看? 您看到自己使用這些方法了嗎?

翻譯自: https://www.javacodegeeks.com/2015/07/casting-in-java-8-and-beyond.html

美圖手機(jī)投射功能在哪

總結(jié)

以上是生活随笔為你收集整理的美图手机投射功能在哪_在Java 8中进行投射(还有其他功能?)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。