sealed java_Java语言的新密封Sealed类型简介 - Ben Evans

密封Sealed表示的概念是可以扩展一个类,但只能通过已知的子类型列表进行扩展,而不能通过其他任何扩展。

其他语言可能对功能的看法有所不同,但是在Java中,应将其视为代表“几乎最终的”类的功能。

让我们来看一个简单示例的新语法的当前版本:

public abstract sealed class SealedPet permits Cat, Dog {

protected final String name;

public abstract void speak();

public SealedPet(String name) {

this.name = name;

}

}

public final class Cat extends SealedPet {

public Cat(String name) {

super(name);

}

public void speak() {

System.out.println(name +" says Meow");

}

public void huntMouse() {

System.out.println(name +" caught a mouse");

}

}

public final class Dog extends SealedPet {

public Dog(String name) {

super(name);

}

public void speak() {

System.out.println(name +" says Woof");

}

public void pullSled() {

System.out.println(name +" pulled the sled");

}

}

SealedPet现在是一个abstract sealed类,它是迄今为止Java中尚未允许使用的关键字。其次,使用第二个新关键字,permits可使开发人员列出此密封类型的允许子类。(如果未提供允许的子类型列表,则从同一编译单元中的子类型推断出来。)

Pet的任何实例都必须是一个Cat或一个Dog这两个子类中一个。

而且,编译器也可以使用此信息。这意味着库代码现在可以安全地假设这是唯一的可能性,并且客户端代码不会违反此假设。

用面向对象的编程理论来说,这代表了一种新的形式关系:一个对象o是一个is-a Cat或Dog,o是Cat和Dog的并集。

从表面上看,这些类型似乎是Java中的一个全新概念,但是它们与枚举的深层相似性应该为许多Java程序员提供一个良好的起点。实际上,在某个地方已经存在类似于求和类型的东西:multicatch子句中的exception参数的类型。

详细挖掘点击标题见原文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值