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技能,特别是想涉足桌面应用开发的开发者来说,这是一个很好的学习案例。
单例模式确保一个类只有一个实例,并提供一个全局访问点。 **有趣见解:** 单例模式是确保在整个应用程序中某个类只存在一个实例的有效方式。这种方式特别适用于日志记录、线程池、对话框等场景。单例模式的关键...
在工厂方法模式中,核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为了一个抽象工厂角色。这种方式通过定义一个创建对象的接口,但让实现这个接口的类决定实例化哪一个类。工厂方法使一个...
3、FACTORY METHOD模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。...
【标签解析】:“范文” 标签表明这篇文章可能是一个示例或模型,用于指导其他学生如何写作,尤其是描述类或叙事类的作文。它可能包含了一些写作技巧和结构示范。 【部分内容解析】:文中描述了一次自然课上的实验...
综上所述,开发"一个牌类游戏"涉及众多Java编程技术,需要结合理论知识与实践经验,才能创造出一款既有趣又稳定的卡牌游戏。通过这个项目,开发者不仅可以提升Java编程技能,还能锻炼软件工程的整体思维。
本案例通过一个有趣的神话故事来解释抽象工厂模式的应用场景:故事讲述了女娲在创造人类时,最初只创造了单一类型的人类,之后意识到需要增加多样性,包括不同的性别和肤色。为了实现这一目标,女娲决定对现有的制造...
- 扩展性强,实现类和抽象类都可以独立扩展。 - **缺点**: - 需要编写大量的代码。 8. **Composite(组合模式)** - **定义**:组合模式是一种结构型设计模式,它将对象组合成树形结构以表示“部分-整体”的...
从Ractive派生的同构抽象类Site和Page 为什么? 我想要用于Web应用程序的全栈可重用代码库 同构 快速,轻松,有趣地构建和工作 它是什么? ri是两个类Site和Page ,可以将其扩展以快速轻松地创建出色的Web应用...
如果希望把一系列行为都规范在类继承层次内,并且可以更好地在同一个地方进行编码,那么抽象类是一个更好的选择。 问题 2: 设计一个贩卖机 设计一个贩卖机,可以接收不同的货币,出售不同的产品?这是一个开放设计...
如果一个类包含至少一个抽象方法,那么这个类必须声明为抽象类。子类必须提供抽象方法的实现,除非子类也是抽象类。 `interface`在Java中用于定义接口,它允许实现多继承。接口中所有方法默认都是`public`的,且...
综上所述,这个压缩包提供的TCP/IP英文版图解资料是一个很好的学习资源,无论是对初学者还是对有经验的网络专业人士,都能提供直观的理解和深入的洞察。通过阅读和理解这些内容,你可以提升自己的网络知识,更好地...
标题和描述均提到了“关于23种设计模式的有趣见解”,这暗示着文档将从一个生动、接地气的角度解析常见的23种软件设计模式。设计模式是软件工程中的一种通用解决方案,它们帮助开发者解决在软件设计过程中遇到的常见...
《高等学校教材:抽象代数》可作为高等学校数学类专业本科高年级学生及研究生的教材,也可作为相关技术人员的参考用书。 目录 第一章 预备知识 第1节 集合与映射 第2节 置换集合S 第3节 等价关系与分类 第4节 代数...
多态是面向对象编程中的一个关键特性,它允许不同类型的对象对同一消息作出不同的响应,从而增强了代码的灵活性和可扩展性。在这个视频教程中,天轰穿老师将带领我们深入理解多态的概念,并通过VS2010这个强大的开发...
抽象类为具体蚂蚁类(如WorkerAnt、QueenAnt)提供了一个基础模板,这些具体类可以通过继承抽象类并重写其方法来实现各自独特的行为。 接下来,我们要讨论的是“线程调度”。在模拟蚂蚁搬运的过程中,可能涉及到多...