public abstract class Either<L, R> implements Serializable{
/**
*
*/
private static final long serialVersionUID = 0l;
private Either() { }
@SuppressWarnings("unchecked")
public boolean isLeft() {
return (this instanceof Left);
}
@SuppressWarnings("unchecked")
public boolean isRight() {
return (this instanceof Right);
}
public abstract L _left();
public abstract R _right();
public static <L, R> Either<L, R> right(final R r) {
return new Right<L, R>(r);
}
public static <L, R> Either<L, R> left(final L l) {
return new Left<L, R>(l);
}
private static final class Left<L, R> extends Either<L, R> implements Serializable{
/**
*
*/
private static final long serialVersionUID = 7066970081776250327L;
private final L l;
Left(final L l) {
this.l = l;
}
@Override
public L _left() {
return l;
}
@Override
public R _right() {
return null;
}
}
private static final class Right<L, R> extends Either<L, R> implements Serializable{
/**
*
*/
private static final long serialVersionUID = -894488879249418100L;
private final R r;
Right(final R r) {
this.r = r;
}
@Override
public L _left() {
return null;
}
@Override
public R _right() {
return r;
}
}
}
要么 left,要么right,哈哈.不能继承的。。。。
分享到:
相关推荐
在这一系列“跳水在面向对象编程”的这篇...抽象类起到多态性和继承一个不同的和非常有趣的角色。我们将讨论抽象类与我们的动手实验和理论作为解释什么输出我们得到的所有方面。我们也将列出下来点,记得在文章的结尾。
在编程领域,尤其是在C++语言...总的来说,这个任务结合了C++面向对象编程的概念和基础几何知识,提供了一个有趣的练习,以展示如何将数学模型转化为程序代码。通过这样的练习,开发者可以提升抽象思维能力和编程技能。
对于初学者来说,这个源代码是一个很好的学习资源。你可以通过阅读和理解代码,了解如何将游戏逻辑转化为程序。同时,你可以尝试修改游戏规则、添加新功能,甚至设计AI对手,以加深对C++编程的理解。 总之,这款C++...
Java_TamoStudy是一款基于Java开发的免费开源工具,它的核心功能是作为一个工作和学习的计时器,旨在帮助用户提高时间...对于想要学习和提升Java技能,特别是想涉足桌面应用开发的开发者来说,这是一个很好的学习案例。
单例模式确保一个类只有一个实例,并提供一个全局访问点。 **有趣见解:** 单例模式是确保在整个应用程序中某个类只存在一个实例的有效方式。这种方式特别适用于日志记录、线程池、对话框等场景。单例模式的关键...
在工厂方法模式中,核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为了一个抽象工厂角色。这种方式通过定义一个创建对象的接口,但让实现这个接口的类决定实例化哪一个类。工厂方法使一个...
《60个有趣的难题》这本书,作为一把开启智慧大门的钥匙,汇集了各领域的难题,它不仅仅是一本普通的图书,而是一个能够激发思考、锻炼逻辑和提升科学素养的平台。它涉及的题目范围广泛,从基础的数学问题到深奥的...
《有趣的折叠》基础练习(1)是一个非常优秀的练习,它将抽象的立体几何知识以一种生动有趣的方式呈现出来,让学生在动手操作的过程中,深入理解平面图形与三维立体图形之间的转换关系。 首先,练习中的第一个问题,...
3、FACTORY METHOD模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。...
【标签解析】:“范文” 标签表明这篇文章可能是一个示例或模型,用于指导其他学生如何写作,尤其是描述类或叙事类的作文。它可能包含了一些写作技巧和结构示范。 【部分内容解析】:文中描述了一次自然课上的实验...
综上所述,开发"一个牌类游戏"涉及众多Java编程技术,需要结合理论知识与实践经验,才能创造出一款既有趣又稳定的卡牌游戏。通过这个项目,开发者不仅可以提升Java编程技能,还能锻炼软件工程的整体思维。
本案例通过一个有趣的神话故事来解释抽象工厂模式的应用场景:故事讲述了女娲在创造人类时,最初只创造了单一类型的人类,之后意识到需要增加多样性,包括不同的性别和肤色。为了实现这一目标,女娲决定对现有的制造...
- 扩展性强,实现类和抽象类都可以独立扩展。 - **缺点**: - 需要编写大量的代码。 8. **Composite(组合模式)** - **定义**:组合模式是一种结构型设计模式,它将对象组合成树形结构以表示“部分-整体”的...
从Ractive派生的同构抽象类Site和Page 为什么? 我想要用于Web应用程序的全栈可重用代码库 同构 快速,轻松,有趣地构建和工作 它是什么? ri是两个类Site和Page ,可以将其扩展以快速轻松地创建出色的Web应用...
如果希望把一系列行为都规范在类继承层次内,并且可以更好地在同一个地方进行编码,那么抽象类是一个更好的选择。 问题 2: 设计一个贩卖机 设计一个贩卖机,可以接收不同的货币,出售不同的产品?这是一个开放设计...
在幼儿园教育中,中班是一个关键时期,孩子们在这个阶段不仅在身体上有所成长,而且在认知和学习能力上也迅速发展。数学作为一门基础学科,对幼儿的逻辑思维和抽象思维能力培养起着至关重要的作用。在这样的背景下,...
如果一个类包含至少一个抽象方法,那么这个类必须声明为抽象类。子类必须提供抽象方法的实现,除非子类也是抽象类。 `interface`在Java中用于定义接口,它允许实现多继承。接口中所有方法默认都是`public`的,且...
综上所述,这个压缩包提供的TCP/IP英文版图解资料是一个很好的学习资源,无论是对初学者还是对有经验的网络专业人士,都能提供直观的理解和深入的洞察。通过阅读和理解这些内容,你可以提升自己的网络知识,更好地...
标题和描述均提到了“关于23种设计模式的有趣见解”,这暗示着文档将从一个生动、接地气的角度解析常见的23种软件设计模式。设计模式是软件工程中的一种通用解决方案,它们帮助开发者解决在软件设计过程中遇到的常见...