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

开放大学门户网站建设方案建筑模板制作过程

开放大学门户网站建设方案,建筑模板制作过程,wordpress异步加载文章,成都双语网站开发Java核心技术 卷1-总结-10 通配符类型通配符概念通配符的超类型限定无限定通配符通配符捕获 通配符类型 通配符概念 通配符类型中#xff0c;允许类型参数变化。 例如#xff0c;通配符类型Pair? extends Employee表示任何泛型Pair类型#xff0c;它的类型参数是… Java核心技术 卷1-总结-10 通配符类型通配符概念通配符的超类型限定无限定通配符通配符捕获 通配符类型 通配符概念 通配符类型中允许类型参数变化。 例如通配符类型Pair? extends Employee表示任何泛型Pair类型它的类型参数是Employee的子类可以是 PairManager但不能是PairString。 假设要编写一个打印雇员对的方法 public static void printBuddies(PairEmployee p) {Employee first p.getFirst ();Employee second p.getSecond();System.out.println(first.getName() and second.getName() are buddies.); }不能将Pair传递给这个方法这一点很受限制。使用通配符类型可以很简单的解决这个问题 public static void printBuddies(Pair? extends Employee p)类型PairManager是Pair? extends Employee的子类型如下图所示。 注意使用通配符不会通过Pair? extends Employee的引用破坏PairManager。 PairManager managerBuddies new Pair(ceo, cfo); Pair? extends Employee wildcardBuddies managerBuddies; // OK wildcardBuddies.setFirst(lowlyEmployee); // compile-time error对setFirst的调用会产生一个类型错误。具体原因可以观察Pair? extends Employee的实现 ? extends Employee getFirst () void setFirst(? extends Employee)这样将不可能调用setFirst方法。编译器只知道需要某个Employee的子类型但不知道具体是什么类型。它拒绝传递任何特定的类型。 因为?不能用来匹配。 使用 getFirst 就不存在这个问题将 getFirst 的返回值赋给一个 Employee 的引用完全合法。这就是引入有限定的通配符的关键之处。现在已经有办法区分安全的访问器方法和不安全的更改器方法了。 通配符的超类型限定 通配符限定还有一个附加的能力即可以指定一个超类型限定supertype bound如下所示 ? super Manager 这个通配符限制为Manager的所有超类型。带有超类型限定的通配符的行为与上述介绍的行为相反。可以为方法提供参数但不能使用返回值。 例如Pair? super Manager有方法: void setFirst(? super Manager) ? super Manager getFirst()编译器无法知道setFirst方法的具体类型因此调用这个方法时不能接受类型为Employee或Object的参数。只能传递Manager类型的对象或者某个子类型如Executive对象。另外如果调用getFirst不能保证返回对象的类型。只能把它赋给一个Object。 下面是一个示例。有一个经理数组并且想把奖金最高和最低的经理放在一个Pair对象中。这里Pair的类型Pair是合理的Pair也是合理的。 下面的方法将可以接受任何适当的Pair public static void minmaxBonus(Manager[] a, Pair? super Manager result) {if (a.length 0) {return;}Manager min a[0];Manager max a[0];for (int i 1; i a.length; i) {if(min.getBonus() a[i].getBonus()) {mina[i];}if(max.getBonus() a[i].getBonus()) {max a[i];}}result.setFirst(min);result.setSecond(max); }带有超类型限定的通配符可以向泛型对象写入带有子类型限定的通配符可以从泛型对象读取。 下面是超类型限定的另一种应用。Comparable接口本身就是一个泛型类型。声明如下 public interface ComparableT {public int compareTo(T other); }在此类型变量指示了other参数的类型。例如String类实现Comparable它的compareTo方法被声明为 public int compareTo(String other)由于Comparable是一个泛型类型可以这样声明ArrayAlg类的min方法 public static T extends ComparableT T min(T[] a)这样写比只使用T extents Comparable更彻底并且对许多类来讲工作得更好。例如如果计算一个String数组的最小值T就是String类型的而String是ComparableString的子类型。但是处理一个LocalDate对象的数组时会出现一个问题。LocalDate实现了ChronoLocalDate而ChronoLocalDate扩展了ComparableChronoLocalDate。因此LocalDate实现的是ComparableChronoLocalDate而不是ComparableLocalDate。 在这种情况下超类型可以用来进行救助 public staticT extends Comparable? super T T min(T[] a)... 现在compareTo方法写成 int compareTo(? super T)有可能被声明为使用类型T的对象也有可能使用T的超类型。无论如何传递一个T类型的对象给compareTo方法都是安全的。 无限定通配符 可以使用无限定的通配符例如Pair?。类型Pair?有以下方法 ? getFirst() void setFirst(?)getFirst 的返回值只能赋给一个Object。setFirst方法不能被调用也不能用Object调用。 Pair?和Pair本质的不同在于可以用任意Object对象调用原始Pair类的setObject 方法。注意Pair?可以调用 setFirstnull。 这样的类型对于许多简单的操作非常有用。例如下面这个方法将用来测试一个pair是否包含一个null引用它不需要实际的类型。 public static boolean hasNulls(Pair? p) {return p.getFirst() null || p.getSecond() null; }通过将hasNulls转换成泛型方法可以避免使用通配符类型 public static T boolean hasNulls(PairT p)但是带有通配符的版本可读性更强。 通配符捕获 编写一个交换成对元素的方法 public static void swap(Pair? p)通配符不是类型变量因此不能在编写代码中使用?作为一种类型。 也就是说下述代码是非法的 ? t p.getFirst();// Error p.setFirst(p.getSecond)); p.setSecond(t);这个问题有一个有趣的解决方案。我们可以写一个辅助方法swapHelper如下所示 public static T void swapHelper(PairT p) {T t p.getFirst();p.setFirst(p.getSecond());p.setSecond(t); }注意swapHelper是一个泛型方法而swap不是它具有固定的Pair?类型的参数。 现在可以由 swap 调用 swapHelper public static void swap(Pair? p){ swapHelper(p); }在这种情况下swapHelper方法的参数T捕获通配符。它不知道是哪种类型的通配符但是这是一个明确的类型并且TswapHelper的定义只有在T指出类型时才有明确的含义。 在这种情况下并不是一定要使用通配符。因为已经直接实现了没有通配符的泛型方法Tvoid swapPairT p。然而下面看一个通配符类型出现在计算中间的示例 public static void maxminBonus(Manager[] a, Pair? super Manager result) {minmaxBonus(a, result);PairAlg.swap(result);// OK--swapHel per captures wildcard type }在这里通配符捕获机制是不可避免的。通配符捕获只有在有许多限制的情况下才是合法的。编译器必须能够确信通配符表达的是单个、确定的类型。
http://www.dnsts.com.cn/news/272128.html

相关文章:

  • 网站做支付功能难吗豫建市2021 42号
  • 云南做商城网站多少钱o2o好网站
  • 交互式网站樱桃企业网站管理系统
  • 新手网站建设网页设计与制作案例教程答案
  • 企业网站备案代理公司郑州电商运营培训
  • 做网站专题模板seo刷排名软件
  • 个人备案后可以做电影网站吗阿里云网站备案注销吗
  • 互联网站建设移动端是手机端吗
  • 网站服务器租用多少钱网站开发基本构成
  • 四库一平台查询系统行业门户网站的优化怎么做yps行业门户系统
  • 营销型网站制作msggwordpress同步简书
  • 如何在网上做自己的网站wordpress插件升级
  • 渭南网站建设风尚网络企业网站设计意义
  • wordpress网站怎么优化上海发布首页
  • 门户网站注意事项网站可能存在什么问题吗
  • 汕头哪里建网站自己做的网站如何上百度
  • 网站的外链怎么做图书购物网站开发的业务分析
  • 做ppt设计师哪个网站好把自己做的网页变成网站
  • 鲜花网站数据库建设分析百度搜索优化软件
  • qq安全中心信任网站想开个网站不知怎样做
  • 查看网站有没有做301广东省城乡建设厅网站
  • 济南网站建设及推广企业品牌网站建设我们的优势
  • 阿里 网站建设深圳装修公司口碑排名
  • php 做资讯网站小程序怎么推广运营
  • 1688网站建设与维护北京品牌建设网站公司排名
  • 大学生创业做创意宿舍装修网站网站开发后台php技术
  • 淮安建设工程协会网站查询避免视觉效果混淆
  • 网站推广方案中评价效果是指做网站销售怎么做
  • 网站优化工作上外贸网站建设
  • 四川专做餐饮的网站logo123