达内教育IT培训沈阳分校

试听课 + 活动课
填写信息优先获取试听课

位置:学校首页 > 学校动态>沈阳靠谱的java培训学校是哪个

沈阳靠谱的java培训学校是哪个

沈阳靠谱的java培训学校是哪个,小编在这里为您推荐达内教育,凭借雄厚的技术研发实力、过硬的教学质量、成熟的就业服务团队,为学员提供强大的职业竞争力,在用人企业中树立了良好的口碑.为不影响您的学习,来校区前请先电话或QQ咨询,方便我校安排相关课程的专业老师为您解答~接下来达内教育的小编为您分享,Java新特性前瞻:封印类

这样是不是违反了封装性原则?

面向对象建模鼓励我们隐藏抽象类的实现,不建议我们问“Shape可能的子类型是什么”之类的问题,并告诉我们向下转换到特定的实现类是一种“代码坏味道”。那么,为什么我们要引入这个似乎违反了这些原则的语言特性呢?(我们也可以针对记录类提出同样的问题:要求在类表示与其API之间建立特定关系是不是违反了封装性原则?)

答案当然是“视情况而定”。在对抽象服务进行建模时,客户端通过抽象类型与服务进行交互可以降低耦合度,并较大限度地提高系统的演化灵活性。但是,在对特定领域进行建模时,如果该领域的特性已经是众所周知的,那么封装性原则可能就不一定会给我们带来多大好处。正如我们在记录类中所看到的那样,在对一些很普通的事物(例如点或RGB颜色)进行建模时,使用通用性对数据进行建模既需要做大量低价值的工作,而且更糟糕的是,这样通常会造成混淆。对于这种情况,封装性原则的成本已经超过了它的优势。

同样的结论也适用于封印类。在为一个简单且稳定的领域建模时,封装性原则并不一定会为我们带来好处,甚至还可能让客户端更加难以使用简单的领域内容。

当然,这并不说封装性原则是错误的,而是说成本和收益之间的权衡有时候不是那么明显。我们可以自己判断什么时候可以从中获得好处,什么时候会给我们造成阻碍。在选择是公开还是隐藏实现时,我们必须清楚封装性原则的好处和成本。通常,封装性是有好处的,但在为简单的领域建模时,封装性的好处可能会大打折扣。

如果一个类型,比如Shape,限定了接口和实现类,我们就可以更放心地把它转成Circle,因为Shape将Circle列为它的已知子类型之一。就像记录类是一种更透明的类,求和类型是一种更透明的多态性。这就是为什么求和类型和乘积类型会如此频繁一起出现。它们都代表了透明性和抽象性之间的某种折衷,因此,适合使用其中一个类型的地方也适合使用另一个类型。乘积和类型通常被称为代数数据类型。

穷举

像Shape这样的封印类限定了一系列子类型,有助于程序员和编译器作出推断,而如果没有这些信息,我们就做不到。其他工具也可以利用这些信息。Javadoc工具在生成的文档页面中列出了封印类允许的子类型。

Java SE 14引入了一种有限定的模式匹配,在未来会进一步扩展。个版本允许我们在instanceof中使用类型模式:

if(shape instanceof Circlec){

//编译器已经为我们将shape转成Circle类型,并赋值给c

System.out.printf("Circle of radius%d%n",c.radius());

}

这离在switch中使用类型模式已经不远了。(Java SE 15还不支持,但很快就会出现。)到了那个时候,我们可以使用switch表达式(case后面直接是类型)来计算一个形状的面积,如下所示:

float area=switch(shape){

caseCirclec->Math.PI*c.radius()*c.radius();

caseRectangle r->Math.abs((r.upperRight().y()-r.lowerLeft().y())

*(r.upperRight().x()-r.lowerLeft().x()));

//不需要提供默认情况!

}

封印类在这里的作用是可以不使用默认子句,因为编译器从Shape的声明中已经知道Circle和Rectangle覆盖了所有形状,因此默认子句不会被执行。(编译器仍然会悄悄地在switch表达式中插入一个默认子句,这样做是为了防止在编译和运行这段时间内子类型发生变化,但没有必要让程序员来做这件事情。)这类似于对枚举进行switch,因为枚举覆盖了所有已知的常量,所以也不需要使用默认子句。(对于这种情况,忽略默认子句通常会更好,因为使用默认子句好像在提醒我们是不是错过了某种情况)。

Shape的继承结构给了客户端一个选择:它们可以完全通过抽象接口使用形状,也可以“展开”抽象,并在必要时与更具体的形状发生交互。模式匹配等特性使这种“展开”更易于阅读和编写。

领取试听课
温馨提示:为不影响您的学业,来校区前请先电话或QQ咨询,方便我校安排相关的专业老师为您解答
版权所有:搜学搜课(www.soxsok.com) 技术支持:搜学搜课网