Joshua Blotch的每个有效 Java:

There is no way to extend an instantiable class with a new value
component while preserving the compareto contract,unless you are
willing to forgo the benefits of object-oriented abstraction

能否请您通过实例和挑战解释上述问题?你能解释一下Joshua对“价值组件”的意义以及其他类型的组件是否可用.

This frees you to implement whatever compareto method you like on the
second class,while allowing its client to view an instance of the
second class as an instance of the first class when needed.

你能解释一下约书亚在二等作为第一堂课时的意思吗?

解决方法

Can you please explain the above with examples and the challenges?

当然.考虑这样的两个类 – 我省略了所有的吸气剂,安装者等,但希望你得到漂移:

class NamedThing {
    String name;
}

class Person extends NamedThing {
    Date dateOfBirth;
}

忽略这是否是一个很好的继承示例 – 这是一个简单的例子.

NamedThing按字母顺序实现基于名称的比较是很自然的.

对于人来说,实施比较首先比较名称(因此在这方面保持一致),然后检查一个出生日期早于另一个日期也是很自然的.

现在想象一下:

NamedThing person1 = new Person("Jon",date1);
NamedThing person2 = new Person("Jon",date2);
NamedThing thing = new NamedThing("Jon");

int comparison1 = person1.compareto(thing);
int comparison2 = person2.compareto(thing);
int comparison3 = person1.compareto(person2);
int comparison4 = thing.compareto(person1);

你想要所有这些结果是什么?如果Person.compareto足够聪明,只能将其日期处理应用于Person的实例,那么您可能希望comparison1和comparison2为0,但compare3为非零.

推测compare4必须为0,因为它使用NamedThing.compareto,它只比较名称.

从根本上说,尝试比较不同类型的实例存在问题.它最终变得更清晰,有一个比较的外部定义,它定义了它将使用的比较.因此,你可以有一个Comparator< Person>它只接受Person引用并使用名称和日期,以及Comparator< NamedThing>只按名称比较.行为将具有对称性和清晰度.

Can you also explain what Joshua means by second class as an instance of the first class?

你已经脱离了背景.它是:“将第二类的实例视为第一类的实例” – 例如

// First class = Animal
// Second class = Zebra
Animal person = new Zebra();

java – 为什么我不能在保留compareTo契约的同时使用新的值组件扩展可实例化的类?的更多相关文章

  1. ios – 实例化ViewController w / xib时的帧大小不正确

    我有一个视图控制器,看起来像:当我通过让spotViewController=SpotViewController实例化视图控制器并将其推送到导航控制器时,结果框架在viewDidLoad和viewWillAppear中都是不正确的.它给了我这是界面构建器中的大小.为什么会发生这种情况以及使用xib实例化视图控制器以确保帧正确的正确方法是什么?解决方法这将解决您的问题,UIViewController从xib加载,在viewDidLoad期间保持xib大小:

  2. ios – 如何在从SlideMenuViewController实例化的ViewControllers中打开TabBarController

    我希望在所有ViewControllers中都有tabBar.我已经实现了SWRevealViewController,它有两个链接的视图控制器,一个是TabBarController,另一个是TableViewController我希望在我的所有ViewControllers中都有与TableViewController相同的tabBar.解决方法IwanttohavetabBarinallmy

  3. ios – 无法实例化名为ADBannerView的类

    我试图在我的应用程序的底部插入一个iad横幅,但在遵循教程后不断收到错误.代码如下.我一直收到以下错误*由于未捕获的异常’NSInvalidUnarchiveOperationException’终止应用程序,原因:’无法实例化名为ADBannerView的类’*第一次抛出调用堆栈:解决方法请确保您已添加“iAd.framework”…要执行此操作,请转到“App.Target”,“General

  4. ios – 通过AppDelegate以Storyboard方式实例化View Controller

    我正在建立一个应用程序–当第一次启动它时,它要求用户做两件事情:>选择国家>接受T&Cs从那里到家庭视图控制器.我目前面临的问题是将第一个视图控制器从我的应用程序代理推送到屏幕上.我正在使用storyboards/Xcode5/iOS7这是我提出的代码:问题是应用程序崩溃时遇到以下错误的最后一行代码:*Terminatingappduetouncaughtexception‘NSinvalidar

  5. ios – 使用UINavigationController的initWithNavigationBarClass的正确方法:toolbarClass:

    从苹果文档我知道一个UiNavigationController可以使用另一个Uinavigationbar使用initWithNavigationBarClass:toolbarClass:方法实例化.如何通过定制的UiNavigationBar子类和IB正确地执行此操作?解决方法您可以像这样使用它来初始化导航控制器,这里CustomNavigationBar是通过子类化UINavigation

  6. swift - singleton

    关于单例,有三个重要的准则需要牢记:单例必须是唯一的,在程序生命周期中只能存在一个这样的实例。单例的存在使我们可以全局访问状态。为保证单例的唯一性,单例类的初始化方法必须是私有的。这样就可以避免其他对象通过单例类创建额外的实例。通过调用dispatch_once,即可保证实例化代码只运行一次。

  7. 用字符串动态创建类并赋值

    在开发中有时候会遇到用一个不确定的类实例化对象,即用字符串转换成类,并实例化对象和赋值;比如一个界面的跳转要有后台来控制,就可以用这种方式。下面简单记录下这个转换过程:然后通过一个字符串来实例化一个对象:到此就创建完一个对象并给对象的属性赋值。

  8. swift中的默认初始化程序

    )的swift类,并在不同的swift文件中实例化了类,并得到了一个编译错误。我仔细检查了行为,即使在swift文档中给出的类定义,这种行为也是一致的:摘录自:苹果公司“Swift编程语言”iBooks。https://itun.es/in/jEUH0.l如果varitem=ShoppingListItem()在appDelegate.swift中完成,从函数应用程序:didFinishLaunchingWithOptions我们得到错误:OTOH,如果我们在课堂宣言结束之后保留实例化,没有问题。

  9. 如何在Swift中创建私有函数?

    .目前swift没有可见性修饰符。在开发者论坛上,语言作者表示,它们位于其优先级列表的首位。在任何人都可以实例化嵌套类并访问这些方法的意义上,他们并不是私人的。

  10. swift – 为什么我不能实例化一个空数组的嵌套类?

    我似乎在使用[foo]()样式语法实例化一个嵌套类类型的空数组时遇到问题:这是我误解的东西–这是在我的咖啡之前,但是我已经检查了发行说明,我认为你应该能够引用这样的嵌套类或者是Beta7中的一个bug。

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部