美图手机投射功能在哪_在Java 8中进行投射(还有其他功能?)
美图手机投射功能在哪
将实例转换为设计不良的类型。 尽管如此,在某些情况下没有其他选择。 从第一天开始,执行此功能就已成为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
。 如果obj
为null
,则它无法通过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
上实现返回Optional
或Stream
强制转换方法。 如果传递的实例类型正确,则将返回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);
类型错误或引用为空的实例将使实例测试失败,并导致空的Optional
或Stream
。 永远不会有ClassCastException
。
成本与收益
还需要确定这些方法是否会发挥自己的作用:
- 实际可以使用多少代码?
- 它们会提高普通开发人员的可读性吗?
- 节省一行值得吗?
- 实施和维护它们的成本是多少?
我回答的问题不多 , 很少 , 是的 , 很少 。 因此,它接近于零和游戏,但我确信这是一个很小但不可忽略的收益。
你怎么看? 您看到自己使用这些方法了吗?
翻译自: https://www.javacodegeeks.com/2015/07/casting-in-java-8-and-beyond.html
美图手机投射功能在哪
美图手机投射功能在哪_在Java 8中进行投射(还有其他功能?)相关推荐
- 美图手机官方正式告别:年中关闭手机业务 手机品牌授权给小米
昨日晚间,美图手机官方微博发布告别信,宣布将在年中关闭手机业务,将旗下美图手机的品牌独家授权给小米集团. 与此同时,美图手机称,美图手机的售后服务还是将由美图方面负责. 关于关闭原因,美图手机在告别信 ...
- 美图手机怎么投屏到电脑
日常生活中在使用手机的时候,特别是玩游戏的时候,是不是感觉自己手机屏幕有点小,如果屏幕可以跟电脑那么大就好了!其实可以实现的,手机投屏电脑就可以满足我们的想法,今天教大家美图手机怎么投屏到电脑. 使用 ...
- 美图手机显示服务器异常怎么回事,美图手机的云服务器
美图手机的云服务器 内容精选 换一换 通过内网连接云手机实例时,需要在租户VPC中创建一台弹性云服务器,作为连接云手机的跳板机器.若创建云手机服务器时未使用自定义网络,还需在云手机租户的VPC和服务器 ...
- 美图手机显示无服务器,美图手机云服务器
美图手机云服务器 内容精选 换一换 购买Windows弹性云服务器后,通过MSTSC远程连接,发现没有声音.通过MSTSC远程连接的Windows弹性云服务器如何播放音频?本节内容适用于Windows ...
- 美图手机显示服务器异常,美图手机的云服务器
美图手机的云服务器 内容精选 换一换 本节操作以Windows Server 2012操作系统的弹性云服务器为例介绍实现多用户登录的操作步骤.Windows server2012服务器默认能够支持两个 ...
- 成也美颜败也美颜 找男明星代言暴露出美图手机巨大的危机
为了提升手机知名度,国内各大手机厂商都倾向选择流量明星作为代言人.OPPO.华为.小米.VIVO等主要手机都堪称是流量收割机,当红的明星都被它们网罗.相比之下,美图手机已经特立独行了,一直以来,美图合 ...
- 从美图手机跨界颐和园,看智能手机如何玩IP定制才能C位出道?
6月27日美图手机在北京颐和园发布美图T9标准版,并首次与颐和园合作推出美图T9颐和园限量版,其"机身图案灵感源自中国传统色彩--黛绿与碧绿,缀以朱砂,山为黛,水为碧,朱砂为红,宛如一幅山水 ...
- 响铃:从《药神》爆火到美图手机跨界 看社交货币的小九九们怎么玩
文|曾响铃 来源|科技向令说(xiangling0815) 通过朋友圈.微博发酵后,点映的<我不是药神>迅速蹿红而提前上映,成为朋友圈.微博.微头条等的热点话题反过来又加速<药神&g ...
- 美图手机×天猫超级粉丝日:滴!你的美丽卡
"新中产群像"被财经作家吴晓波描绘的淋漓尽致:他们追求生活品质,走在时尚前沿,热爱艺术生活,就连消费都需要"与众不同". 随着社会和经济水平的发展,这些新中产正 ...
最新文章
- ubuntu 解压rar报错
- Vue项目如何提高效率?大厂2大实践总结告诉你
- VTK:PolyData之ExtractSelectedIds
- WIN10 查看已经连接的wifi的密码
- 工业级以太网交换机跟普通商用网络交换机有啥区别?
- 第 6-4 课:MyBatis 核心和面试题(上)
- 常用数据库的驱动程序加载和Url下载地址
- 拼多多算法工程师笔试题之分配巧克力
- call_user_func_array 调用回调函数
- (疑似问题)用IDM某些版本可能会导致系统永久性开机黑屏
- 26 王者荣耀刷金币脚本
- 久违的狮子王,王者归来
- 识别音标python_音标可以识别单词吗?
- Python 用turtle画多个八边形组成的蜘蛛网
- 邓白氏码查询不能用_邓白氏编码查询有哪些意义?
- Java网络编程与NIO详解14:Tomcat 常见面试题汇总
- 青岛海尔供应商java面试_青岛某企业面试题(2019-11)
- 年入200万的华人程序员,过了30岁就成傻逼了?
- 【网站】国内 前6名 Java开源CMS建站系统
- getInputStream() has already been called for this request解决方法二