达内教育IT培训沈阳分校

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

位置:学校首页 > 学校动态>沈阳java培训机构实力

沈阳java培训机构实力

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

代数数据类型示例

“乘积和”模式非常强大。较好的情况是,子类型列表不发生变化,并预计客户端会直接区分子类型,这样会更容易,也更有用。

限定一组固定的子类型,并鼓励客户端直接使用这些子类型,这是一种紧耦合的形式。在所有条件相同的情况下,我们鼓励使用松耦合的设计,以较大限度地提高灵活性,但这种松耦合也是要付出代价的。在编程语言中同时使用“不透明”和“透明”的抽象可以让我们根据实际情况选择合适的工具。

我们可能已经在java.util.concurrent.Future API中使用了一系列乘积和(如果当时这是一种选择的话)。Future表示可以与其发起者并发执行的计算,Future所代表的计算可能还没有开始、已经开始但还没有完成、已经成功完成(或已经完成但出现异常)、已经超时或被中断取消。Future的get()方法反映了所有这些可能性:

interfaceFutureV>{

...

V get(long timeout,TimeUnit unit)

throws InterruptedException,ExecutionException,TimeoutException;

}

如果计算尚未完成,get()会一直阻塞,直到完成。如果是成功的,则返回计算结果。如果抛出异常,异常将被封装在ExecutionException中。如果计算超时或被中断,则会抛出另一种异常。这个API非常,但使用起来有些痛苦,因为它有多个控制路径,不管是普通路径(get()返回一个值)还是失败路径,都必须在catch块中处理:

try{

V v=future.get();

//处理一般的完成情况

}

catch(TimeoutException e){

//处理超时

}

catch(InterruptedException e){

//处理取消

}

catch(ExecutionException e){

Throwable cause=e.getCause();

//处理失败

}

如果在Java 5引入Future时,我们已经有封印类、记录类和模式匹配,那么我们可能会这样定义返回类型:

sealed interface AsyncReturnV>{

record SuccessV>(V result)implements AsyncReturnV>{}

record FailureV>(Throwable cause)implements AsyncReturnV>{}

record TimeoutV>()implements AsyncReturnV>{}

record InterruptedV>()implements AsyncReturnV>{}

}

...

interface FutureV>{

AsyncReturnV>get();

}

在这里,异步结果可以是成功(包含返回值)、失败(包含异常)、超时或取消。这是对可能出现的结果更为统一的描述,而不是用返回值描述其中的一些结果,再用异常描述另一些结果。客户端仍然需要处理所有的情况——无法回避任务可能会失败的事实——但我们可以统一地(并更紧凑地)处理这些情况(见脚注):

AsyncResult r=future.get();

switch(r){

caseSuccess(var result):...

caseFailure(Throwable cause):...

caseTimeout(),Interrupted():...

}

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