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

sealed java_Java语言的新密封Sealed类型简介 – Ben Evans密封 Sealed 表示的概念是可以扩展一个类 但只能通过已知的子类型列表进行扩展 而不能通过其他任何扩展 其他语言可能对功能的看法有所不同 但是在 Java 中 应将其视为代表 几乎最终的 类的功能 让我们来看一个简单示例的新语法的当前版本 publicabstra Dog protectedfin

密封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参数的类型。

详细挖掘点击标题见原文

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231000.html原文链接:https://javaforall.net

(0)
上一篇 2026年2月4日 上午9:01
下一篇 2026年2月4日 上午9:22


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号