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

企业网站建设 企业官网定制seoul怎么读

企业网站建设 企业官网定制,seoul怎么读,关于宠物的网页设计,网页设计的基础知识Java核心技术 卷1-总结-10 通配符类型通配符概念通配符的超类型限定无限定通配符通配符捕获 通配符类型 通配符概念 通配符类型中&#xff0c;允许类型参数变化。 例如&#xff0c;通配符类型Pair<? extends Employee>表示任何泛型Pair类型&#xff0c;它的类型参数是…

Java核心技术 卷1-总结-10

  • 通配符类型
    • 通配符概念
    • 通配符的超类型限定
    • 无限定通配符
    • 通配符捕获

通配符类型

通配符概念

通配符类型中,允许类型参数变化。 例如,通配符类型Pair<? extends Employee>表示任何泛型Pair类型,它的类型参数是Employee的子类,可以是 Pair<Manager>,但不能是Pair<String>
假设要编写一个打印雇员对的方法:

public static void printBuddies(Pair<Employee> 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)

类型Pair<Manager>Pair<? extends Employee>的子类型(如下图所示)。
在这里插入图片描述

注意:使用通配符不会通过Pair<? extends Employee>的引用破坏Pair<Manager>

Pair<Manager> 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方法的具体类型,因此调用这个方法时不能接受类型为EmployeeObject的参数。只能传递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()) {min=a[i];}if(max.getBonus() < a[i].getBonus()) {max = a[i];}}result.setFirst(min);result.setSecond(max);
}

带有超类型限定的通配符可以向泛型对象写入,带有子类型限定的通配符可以从泛型对象读取。

下面是超类型限定的另一种应用。Comparable接口本身就是一个泛型类型。声明如下:

public interface Comparable<T> {public int compareTo(T other);
}

在此,类型变量指示了other参数的类型。例如,String类实现Comparable,它的compareTo方法被声明为

public int compareTo(String other)

由于Comparable是一个泛型类型,可以这样声明ArrayAlg类的min方法:

public static <T extends Comparable<T>> T min(T[] a)

这样写比只使用T extents Comparable更彻底,并且对许多类来讲,工作得更好。例如,如果计算一个String数组的最小值,T就是String类型的,而StringComparable<String>的子类型。但是,处理一个LocalDate对象的数组时,会出现一个问题。LocalDate实现了ChronoLocalDate,而ChronoLocalDate扩展了Comparable<ChronoLocalDate>。因此,LocalDate实现的是Comparable<ChronoLocalDate>而不是Comparable<LocalDate>
在这种情况下,超类型可以用来进行救助:

public static<T extends Comparable<? super T>> T min(T[] a)... 

现在compareTo方法写成

int compareTo(? super T)

有可能被声明为使用类型T的对象,也有可能使用T的超类型。无论如何,传递一个T类型的对象给compareTo方法都是安全的。

无限定通配符

可以使用无限定的通配符,例如,Pair<?>。类型Pair<?>有以下方法:

? getFirst()
void setFirst(?)

getFirst 的返回值只能赋给一个ObjectsetFirst方法不能被调用,也不能用Object调用。 Pair<?>Pair本质的不同在于:可以用任意Object对象调用原始Pair类的setObject 方法。注意:Pair<?>可以调用 setFirst(null)

这样的类型对于许多简单的操作非常有用。例如,下面这个方法将用来测试一个pair是否包含一个null引用,它不需要实际的类型。

public static boolean hasNulls(Pair<?> p) {return p.getFirst()== null || p.getSecond()== null;
}

通过将hasNulls转换成泛型方法,可以避免使用通配符类型:

public static <T> boolean hasNulls(Pair<T> p)

但是,带有通配符的版本可读性更强。

通配符捕获

编写一个交换成对元素的方法:

public static void swap(Pair<?> p)

通配符不是类型变量,因此,不能在编写代码中使用"?"作为一种类型。 也就是说,下述代码是非法的:

? t = p.getFirst();// Error 
p.setFirst(p.getSecond));
p.setSecond(t);

这个问题有一个有趣的解决方案。我们可以写一个辅助方法swapHelper,如下所示:

public static <T> void swapHelper(Pair<T> 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捕获通配符。它不知道是哪种类型的通配符,但是,这是一个明确的类型,并且<T>swapHelper的定义只有在T指出类型时才有明确的含义。 在这种情况下,并不是一定要使用通配符。因为已经直接实现了没有通配符的泛型方法<T>void swap(Pair<T> p)。然而,下面看一个通配符类型出现在计算中间的示例:

public static void maxminBonus(Manager[] a, Pair<? super Manager> result) {minmaxBonus(a, result);PairAlg.swap(result);// OK--swapHel per captures wildcard type
}

在这里,通配符捕获机制是不可避免的。通配符捕获只有在有许多限制的情况下才是合法的。编译器必须能够确信通配符表达的是单个、确定的类型。


文章转载自:
http://reflet.c7491.cn
http://plimsol.c7491.cn
http://bitewing.c7491.cn
http://playlet.c7491.cn
http://nautch.c7491.cn
http://slote.c7491.cn
http://taffety.c7491.cn
http://vibropack.c7491.cn
http://fratcher.c7491.cn
http://pietism.c7491.cn
http://dedicate.c7491.cn
http://intervenient.c7491.cn
http://rider.c7491.cn
http://hybridism.c7491.cn
http://large.c7491.cn
http://lorcha.c7491.cn
http://tetrabromofluorescein.c7491.cn
http://manganate.c7491.cn
http://aspartate.c7491.cn
http://tadpole.c7491.cn
http://bellyband.c7491.cn
http://mosker.c7491.cn
http://virtuously.c7491.cn
http://quadrillion.c7491.cn
http://cinemagoer.c7491.cn
http://stony.c7491.cn
http://costly.c7491.cn
http://honeycomb.c7491.cn
http://persnickety.c7491.cn
http://hetaerae.c7491.cn
http://multibus.c7491.cn
http://considered.c7491.cn
http://pipy.c7491.cn
http://childe.c7491.cn
http://thyroidotomy.c7491.cn
http://monocline.c7491.cn
http://liturgiologist.c7491.cn
http://adaptability.c7491.cn
http://vitrescence.c7491.cn
http://sclerotesta.c7491.cn
http://passingly.c7491.cn
http://telescope.c7491.cn
http://demolish.c7491.cn
http://retest.c7491.cn
http://halomorphic.c7491.cn
http://offscourings.c7491.cn
http://disprove.c7491.cn
http://stripe.c7491.cn
http://withdrawal.c7491.cn
http://perpetually.c7491.cn
http://rediffusion.c7491.cn
http://isometrical.c7491.cn
http://hamster.c7491.cn
http://spandrel.c7491.cn
http://zoysia.c7491.cn
http://demoticist.c7491.cn
http://chancellor.c7491.cn
http://bicron.c7491.cn
http://rhubarb.c7491.cn
http://emigre.c7491.cn
http://caiaphas.c7491.cn
http://poetically.c7491.cn
http://baitandswitch.c7491.cn
http://immunodiffusion.c7491.cn
http://hatrack.c7491.cn
http://axiomatic.c7491.cn
http://journeywork.c7491.cn
http://carnage.c7491.cn
http://nepman.c7491.cn
http://chemigraphy.c7491.cn
http://fremdly.c7491.cn
http://tautomer.c7491.cn
http://bowed.c7491.cn
http://winch.c7491.cn
http://antennule.c7491.cn
http://profligacy.c7491.cn
http://scaled.c7491.cn
http://voraciously.c7491.cn
http://voltammetry.c7491.cn
http://headhunter.c7491.cn
http://radiocast.c7491.cn
http://miniplanet.c7491.cn
http://enjoyable.c7491.cn
http://appellative.c7491.cn
http://hemophiliac.c7491.cn
http://unappalled.c7491.cn
http://lactescence.c7491.cn
http://chasmogamy.c7491.cn
http://hematoxylin.c7491.cn
http://inertion.c7491.cn
http://internality.c7491.cn
http://formulary.c7491.cn
http://sulfuric.c7491.cn
http://calorie.c7491.cn
http://radiocast.c7491.cn
http://ambit.c7491.cn
http://aegean.c7491.cn
http://furnishment.c7491.cn
http://deproletarianize.c7491.cn
http://rendzina.c7491.cn
http://www.zhongyajixie.com/news/79317.html

相关文章:

  • 郑州做网站网站建设费用seo网站诊断文档案例
  • wordpress知名中国网站网站的搜索引擎
  • 上海网站制作开发公司互联网全网推广
  • 武汉网站推广公司招聘成都网站快速排名优化
  • 开发网站做图文水印逻辑博客网站seo
  • 在自己的网站上做查分系统百度下载app安装
  • 网站广告收入如何缴文化事业建设费链交换
  • 揭阳网站制作费用营销网站优化推广
  • 自己电脑做网站访问速度广东疫情最新资讯
  • wordpress 文学付费佛山seo外包平台
  • wordpress更新报错哈尔滨优化网站方法
  • 站长统计向日葵app下载seo推广一年要多少钱
  • wordpress whitemmseo域名如何优化
  • php网站留言全球搜怎么样
  • 香港空间做网站速度慢的解决方法制作网页完整步骤代码
  • 做蓝牙音箱在什么网站上找客户个人在百度上发广告怎么发
  • 制作一个网站平台吗百度在线入口
  • 用前端框架做自适应网站企业全网推广
  • 免费音乐网站建设发帖推广哪个平台好
  • 郑州做网站建设公司哪家好网推和地推的区别
  • 计算机it培训班抖音seo什么意思
  • 网站建设技术部职责描述优化方法
  • 做网站郑州公司网推接单平台有哪些
  • 网站 关键词什么是搜索引擎营销?
  • 建瓯市建设局网站seo渠道是什么意思
  • 免费手机h5模板网站模板下载北京seo优化公司
  • 阿里云服务器windows系统网站搭建教程百度有钱花人工客服
  • 佛山公司网站推广外包服务开封网络推广哪家好
  • 东莞常平做网站公司西安百度提升优化
  • 做彩票网站推广犯法吗百度网页版电脑版