美图手机投射功能在哪

将实例转换为设计不良的类型。 尽管如此,在某些情况下没有其他选择。 从第一天开始,执行此功能就已成为Java的一部分。

我认为Java 8提出了对这种古老技术稍加改进的需求。

静态铸造

Java中最常见的转换方法如下:

静态铸造

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

这使用了嵌入到该语言中的instanceof和cast运算符。 实例转换为的类型(在这种情况下为Integer在编译时必须是静态已知的,因此我们将其称为静态转换。

如果obj不是Integer ,则上述测试将失败。 如果我们尝试将其强制转换,则会得到ClassCastException 。 如果objnull ,则它无法通过instanceof测试,但可以强制转换,因为null可以是任何类型的引用。

动态铸造

我很少遇到的一种技术是使用Class上与运算符相对应的方法:

动态转换为已知类型

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

请注意,尽管在此示例中,在编译时也知道要强制转换为的类,但不一定如此:

动态铸造

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'
}

因为类型在编译类型时是未知的,所以我们将其称为动态转换。

类型和空引用错误的实例的测试和转换结果与静态转换完全相同。

由vankarsten在CC-BY-NC 2.0下发布 。

在流中投放和可选

现在

转换Optional的值或Stream的元素是一个两步过程:首先,我们必须过滤掉错误类型的实例,然后才能将其转换为所需的类型。

使用Class上的方法,我们使用方法引用来实现。 以Optional为例:

强制转换

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

我们需要两个步骤来执行此操作没什么大不了的,但我觉得这有点尴尬,而且比必要时更冗长。

未来(也许)

我建议在Class上实现返回OptionalStream强制转换方法。 如果传递的实例类型正确,则将返回Optional或包含转换实例的Singleton Stream 。 否则,两者都将为空。

实现这些方法很简单:

课堂上的新方法

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一步进行过滤和转换:

该死的FlatMap

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

类型错误或引用为空的实例将使实例测试失败,并导致空的OptionalStream 。 永远不会有ClassCastException

成本与收益

还需要确定这些方法是否会发挥自己的作用:

  • 实际可以使用多少代码?
  • 它们会提高普通开发人员的可读性吗?
  • 节省一行值得吗?
  • 实施和维护它们的成本是多少?

我回答的问题不多很少是的很少 。 因此,它接近于零和游戏,但我确信这是一个很小但不可忽略的收益。

你怎么看? 您看到自己使用这些方法了吗?

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

美图手机投射功能在哪

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

  1. 美图手机官方正式告别:年中关闭手机业务 手机品牌授权给小米

    昨日晚间,美图手机官方微博发布告别信,宣布将在年中关闭手机业务,将旗下美图手机的品牌独家授权给小米集团. 与此同时,美图手机称,美图手机的售后服务还是将由美图方面负责. 关于关闭原因,美图手机在告别信 ...

  2. 美图手机怎么投屏到电脑

    日常生活中在使用手机的时候,特别是玩游戏的时候,是不是感觉自己手机屏幕有点小,如果屏幕可以跟电脑那么大就好了!其实可以实现的,手机投屏电脑就可以满足我们的想法,今天教大家美图手机怎么投屏到电脑. 使用 ...

  3. 美图手机显示服务器异常怎么回事,美图手机的云服务器

    美图手机的云服务器 内容精选 换一换 通过内网连接云手机实例时,需要在租户VPC中创建一台弹性云服务器,作为连接云手机的跳板机器.若创建云手机服务器时未使用自定义网络,还需在云手机租户的VPC和服务器 ...

  4. 美图手机显示无服务器,美图手机云服务器

    美图手机云服务器 内容精选 换一换 购买Windows弹性云服务器后,通过MSTSC远程连接,发现没有声音.通过MSTSC远程连接的Windows弹性云服务器如何播放音频?本节内容适用于Windows ...

  5. 美图手机显示服务器异常,美图手机的云服务器

    美图手机的云服务器 内容精选 换一换 本节操作以Windows Server 2012操作系统的弹性云服务器为例介绍实现多用户登录的操作步骤.Windows server2012服务器默认能够支持两个 ...

  6. 成也美颜败也美颜 找男明星代言暴露出美图手机巨大的危机

    为了提升手机知名度,国内各大手机厂商都倾向选择流量明星作为代言人.OPPO.华为.小米.VIVO等主要手机都堪称是流量收割机,当红的明星都被它们网罗.相比之下,美图手机已经特立独行了,一直以来,美图合 ...

  7. 从美图手机跨界颐和园,看智能手机如何玩IP定制才能C位出道?

    6月27日美图手机在北京颐和园发布美图T9标准版,并首次与颐和园合作推出美图T9颐和园限量版,其"机身图案灵感源自中国传统色彩--黛绿与碧绿,缀以朱砂,山为黛,水为碧,朱砂为红,宛如一幅山水 ...

  8. 响铃:从《药神》爆火到美图手机跨界 看社交货币的小九九们怎么玩

    文|曾响铃 来源|科技向令说(xiangling0815) 通过朋友圈.微博发酵后,点映的<我不是药神>迅速蹿红而提前上映,成为朋友圈.微博.微头条等的热点话题反过来又加速<药神&g ...

  9. 美图手机×天猫超级粉丝日:滴!你的美丽卡

    "新中产群像"被财经作家吴晓波描绘的淋漓尽致:他们追求生活品质,走在时尚前沿,热爱艺术生活,就连消费都需要"与众不同". 随着社会和经济水平的发展,这些新中产正 ...

最新文章

  1. ubuntu 解压rar报错
  2. Vue项目如何提高效率?大厂2大实践总结告诉你
  3. VTK:PolyData之ExtractSelectedIds
  4. WIN10 查看已经连接的wifi的密码
  5. 工业级以太网交换机跟普通商用网络交换机有啥区别?
  6. 第 6-4 课:MyBatis 核心和面试题(上)
  7. 常用数据库的驱动程序加载和Url下载地址
  8. 拼多多算法工程师笔试题之分配巧克力
  9. call_user_func_array 调用回调函数
  10. (疑似问题)用IDM某些版本可能会导致系统永久性开机黑屏
  11. 26 王者荣耀刷金币脚本
  12. 久违的狮子王,王者归来
  13. 识别音标python_音标可以识别单词吗?
  14. Python 用turtle画多个八边形组成的蜘蛛网
  15. 邓白氏码查询不能用_邓白氏编码查询有哪些意义?
  16. Java网络编程与NIO详解14:Tomcat 常见面试题汇总
  17. 青岛海尔供应商java面试_青岛某企业面试题(2019-11)
  18. 年入200万的华人程序员,过了30岁就成傻逼了?
  19. 【网站】国内 前6名 Java开源CMS建站系统
  20. getInputStream() has already been called for this request解决方法二

热门文章

  1. CF1556D-Take a Guess【交互】
  2. P3295-[SCOI2016]萌萌哒【ST表,并查集】
  3. 【DP】字串距离(luogu 1279)
  4. 【模拟】聊天服务器的外部流量
  5. poj3648 Wedding 2-sat
  6. 跟我学 Java 8 新特性之 Stream 流(四)并行流
  7. Eclipse下导入外部jar包的3种方式
  8. Spring Boot定制启动图案
  9. (五)SpringBoot 能挣钱的几个项目!!!
  10. 小课堂?小视频?小商店?