当前位置: 首页 > news >正文

网站开发的最初阶段包括秦皇岛黄金海岸龙华园海景酒店

网站开发的最初阶段包括,秦皇岛黄金海岸龙华园海景酒店,宝塔wordpress经常502,滁州网站建设联系方式介绍 使用幻像类型是一种非常简单的技术#xff0c;可用于提高代码的编译时安全性。 有许多潜在的用例具有不同的复杂性级别#xff0c;但是即使幻像类型的使用非常轻巧#xff0c;也可以显着提高编译时的安全性。 幻像类型只是带有未使用类型参数的参数化类型。 例如#… 介绍 使用幻像类型是一种非常简单的技术可用于提高代码的编译时安全性。 有许多潜在的用例具有不同的复杂性级别但是即使幻像类型的使用非常轻巧也可以显着提高编译时的安全性。 幻像类型只是带有未使用类型参数的参数化类型。 例如 public class MyPhantomTypeT {public String sayHello() {return hello;}// other methods/fields that never refer to T } 该示例类的类型参数为T但实际上从未在代码中使用。 乍一看这似乎没有什么用但事实并非如此 幻像类型的所有对象实例都带有类型信息因此该技术可用于“标记”带有一些可在编译时检查的额外信息的值。 当然我们可以在不使用泛型的情况下编写代码来随时逃避键入操作但是应不惜一切代价避免这样做。 某些语言例如Scala完全不允许删除类型参数因此使用Scala时您将始终必须完全保留类型信息。 示例用例和实现 幻像类型最简单最有用的用例之一是数据库ID。 如果我们有一个典型的三层数据服务WebJava Web应用程序则可以通过在架构的“端点”以外的所有地方用幻像类型替换原始id来获得很多编译时安全性。 因此数据层会将原始ID放入数据库查询中而Web层可能会从外部资源例如HTTP参数获取原始ID但是否则我们始终会处理幻像类型。 在此示例中我假设数据库ID类型始终为64位长数字。 首先我们需要将由所有“实体类”实现的标记器接口该接口应受幻像类型id机制支持 public interface Entity {Long getId(); } 这个标记接口的唯一目的是将我们的幻像型id限制为一组标记的类并提供将在实现中使用的getId方法。 实际的幻像类型是单个id值的不可变容器。 type参数表示id的“目标类型”这使得可以以编译时安全的方式在不同实体的id值之间进行区分。 我喜欢将此类称为Ref参考的简写但这只是个人选择。 Value RequiredArgsConstructor(AccessLevel.PRIVATE) public final class RefT extends Entity implements Serializable {public final long id; public static T extends Entity RefT of(T value) {return new RefT(value.getId());}public static T extends Entity RefT of(long id, ClassT clazz) {return new RefT(id);}Overridepublic String toString() {return String.valueOf(id);}} 此示例类使用Project Lombok中的Value和RequiredArgsConstructor批注。 如果您不使用Lombok请手动添加构造函数getterequals和hashCode实现或在下面查找完整的实现。 注意类型参数T永远不会在任何地方使用。 这也意味着您在运行时无法知道Ref的类型但这通常不是必需的。 使用示例实现 现在我们将在可能的情况下将原始ID替换为Refs。 例如我们可以有一个将用户添加到组中的服务级别方法 void addUserToGroup(long userId, long groupId); // without parameter names void addUserToGroup(long, long);// VSvoid addUserToGroup(RefUser userRef, RefGroup groupRef); // without parameter names void addUserToGroup(RefUser, RefGroup); 现在当我们要调用此方法时将始终需要Ref对象而不是原始的long值。 在此示例中有两种获取参考值的方法。 如果您有实际对象的实例请调用Ref.ofobject。 这是除Web以外的其他层中最常见的方法 如果您有原始ID并且知道目标类型请调用Ref.ofidTargetType.class。 如果原始ID来自外部则通常在Web层中需要这样做 为了从Ref提取原始ID值您可以阅读该字段或使用getter。 通常仅在构建数据库查询之前才需要这样做。 总结思想 为了了解裁判的好处请尝试考虑以下情况 如果您在采用不同类型ID的方法调用中更改参数顺序会发生什么情况 例如我们的addUserToGroup 如果更改数据库ID的类型例如Integer- Long或Long- UUID会发生什么 如果您经常具有与id相同类型的方法参数但它们不是id那么您将有多大可能出现运行时错误 例如如果您有整数ID并且在同一方法中混合了ID和某种列表索引 在所有这些情况下使用Refs都可以确保在代码不正确的地方出现编译时错误。 在典型的代码库中这是不费吹灰之力的巨大胜利。 编译时的安全性降低了重构的成本和难度这使得维护代码库变得非常容易和安全。 数据库ID只是幻像类型的简单示例。 其他典型的用例包括某种状态机例如Order InProcessOrder Completed与仅Order对象以及某种类型的值单元信息例如LongNumber WeightLongNumber Temperature与longs 。 Ref T实现无Lombok public final class RefT extends Entity implements Serializable {public final long id;public static T extends Entity RefT of(T value) {return new RefT(value.getId());}public static T extends Entity RefT of(long id, ClassT clazz) {return new RefT(id);}Overridepublic String toString() {return String.valueOf(id);}private Ref(long id) {this.id id;}public long getId() {return this.id;}Overridepublic int hashCode() {return (int) (id ^ (id 32));}Overridepublic boolean equals(Object o) {if (this o)return true;if (o null || o.getClass() ! this.getClass())return false;Ref? other (Ref?) o;return other.id this.id;} } 参考 Gekkio的技术博客博客中的JCG合作伙伴 Joonas Javanainen提出了幻像类型 提高了编译时安全性 。 翻译自: https://www.javacodegeeks.com/2013/02/increased-compile-time-safety-with-phantom-types.html
http://www.huolong8.cn/news/91570/

相关文章:

  • 域名服务商怎么查询网站推广优化外包便宜
  • 大庆建设网站互联网网站名字
  • ppt模版模板免费网站互联网app推广
  • 怎么seo网站推广网上哪些网站可以做兼职
  • 郑州网站建设的公司哪家好多少钱网站建设
  • 四川学校网站建设公大型网站服务器价格
  • 石头科技 网站开发网站广告psd
  • 网页制作与网站建设 在线作业交换友情链接的意义是什么
  • 网站建设需要什么硬件和软件企业服饰网站模板
  • 重庆网站seo建设wordpress 机主题
  • 佛山网站建设收费标准网站突然不能访问
  • 为什么很少用python做网站给我免费播放的电影在线观看
  • 哪个网站可以做网红广州安全教育平台打卡引热议
  • 顺德网站建设价位东莞网站关键词优化效果
  • 国际教育机构网站建设开发方案网站如何制作学校的做
  • 怎样做网站初中生长春火车站高清图片
  • wap站开发常州青竹网络做网站
  • 公司设计网站应遵守哪些常理唯品会专门做特卖的网站
  • 公司给别人做的网站违法吗义乌百度广告公司
  • 重庆平台网站建设多少钱电脑培训网上培训班
  • 教育在线网站怎样做直播google关键词搜索工具
  • 北京网站开发工程师python 网站开发 前端
  • 附近网站建设公司免费的域名注册网站
  • 北京建设集团招聘信息网站广州关键词优化外包
  • 网站建设项目软件开发招标文件做网站要几个人 要多少钱
  • 建设银行信用卡被钓鱼网站骗了15000大庆免费网站建设
  • 网站备案核验点 上海品牌建设最高境界是培育客户成为
  • 怎样制作企业的网站html网页制作期末作业
  • 手机网页及网站设计网站开发 相册
  • 做钓鱼网站获利3万网站建设div ass