Effctive Java 笔记

2023-05-16

8,重写equals,只适合值类(枚举类除外)

        自反性:x.equals(x)==true

        对称性: x.equals(y)==true 必然 y.equals(x)==true

        传递性: x.equals(y)==true, y.equals(z)==true 必然 x.equals(z)==true

        一致性:多次执行结果一直。

        问题:无法再扩展可实例化类(写子类)的同时,既增加值组件,又保留equals约定。         

        如Piont(x,y),Point3D(x,y,z)。p.equals(p3d) == true, p3d.equals(p) == false  

        解决方式:1,用组合代替继承。2,值组件加到抽象类中。

 

9,重写equals,必须重写hashCode

        equals相等必须hashCode相等。hashMap,hashSet需要。

 

10,始终覆盖toString

 

chapter-4 类和接口

13,使类和成员的访问下最小。以后再改大。

16,组合优于继承

        继承会破坏封装。例子。

package study.timeriver.wnj;

import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;

public class Test {

	//继承破坏封装。super.addAll()原本调用的是HashSet的add()。现在变成了调用MyHashSet.add()
	//addAll()调用add()是自用(self-use)。是实现细节。不是接口承诺。
	
	//例子2:子类所有的add()都会验证,如果父类又新增了一个addX(),但没有验证。使用子类对象就可以调用addX()。这就破坏了子类的封装。可以加入非法元素了。
	//例子3:父类新增一个子类的方法。会直接编译错误。
	public static void main(String[] args) {
		MyHashSet<String> s = new MyHashSet<String>();
        s.addAll(Arrays.asList("a", "b", "c"));
        //输出是6,不是3。
        System.out.println(s.getAddCount());
	}
	
	static class MyHashSet<E> extends HashSet<E> {
		private int addCount = 0;

		public boolean add(E e) {
			addCount++;
			return super.add(e);
		}
		public boolean addAll(Collection<? extends E> c) {
			addCount += c.size();
			return super.addAll(c);
		}

		public int getAddCount() {
			return addCount;
		}
	}
}

 

        使用组合就可以避免。

17,要么为继承设计,并提供文档。要么禁止继承。

        说明那些方法可以覆盖,如何覆盖。

18,接口优于抽象类

19,接口只用于定义类型                

20 用类层次替代标签类。        

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Effctive Java 笔记 的相关文章

  • 使用 Guice 注入类集合

    我正在尝试用 Google Guice 2 0 注入东西 我有以下结构 FooAction implements Action BarAction implements Action 然后我有一个带有以下构造函数的 ActionLibrar
  • 如何将 JSpinner 的值设置为特定日期

    我有一个JSpinner我添加到JPanel我想将其时间设置为 GregorianCalendar calendar JSpinner spinner new JSpinner spinner setModel model pom add
  • 如何在 Java 中访问嵌套的 HashMap?

    我有一个 Java 中的 HashMap 其中的内容 你们可能都知道 可以通过以下方式访问 HashMap get keyname 如果一个 HashMap 位于另一个 HashMap 中 即嵌套的 HashMap 我将如何访问内容 我可以
  • 如何使用 Maven Failsafe 插件运行 JUnit 5 集成测试?

    当我运行命令时 Maven Failsafe 插件找不到我的 JUnit 5 集成测试mvn clean failsafe integration test 尽管它可以找到文件 我有junit jupiter api and junit j
  • 单元测试组合服务方法

    我正在为一个类编写 junit 单元测试 该类使用以下方法实现公开的接口 public Set
  • GET 请求的 Spring 注解

    这两种spring GET方法有什么区别呢 哪一种是首选方法 Component Scope request Path public class TestComponent GET Path hello public String prin
  • 迁移到Java 9或更高版本时是否需要切换到模块?

    我们目前正在从 Java 8 迁移到 Java 11 但是 升级我们的服务并没有我们预期的那么痛苦 我们基本上只需要更改我们的版本号build gradle文件和服务都顺利启动并运行 我们升级了库以及使用这些库的 微 服务 到目前为止没有问
  • 当 JMS Prod 位于辅助 POJO 类中时,如何在事务中包含 JMS Producer

    简短的问题 有没有办法强制无状态 EJB 调用的 POJO 存在于 EJB 的上下文中 以便事务和资源注入可以在 POJO 中工作 具体来说 在我想要做的事情的上下文中 如何在 EJB 的事务中包含 POJO JMS 生产者 该生产者在调用
  • 在 Junit 测试中使用 ReflectionTestUtils.setField()

    我是 JUnittesting 的新手 所以我有一个问题 谁能告诉我为什么我们使用ReflectionTestUtils setField 在我们的 Junit 测试示例中 正如评论中提到的 java 文档很好地解释了用法 但我还想给你们举
  • LocalDate 减去 period 得到错误的结果

    LocalDate减去一个Period 如 28年1个月27天 得到错误的结果 但减去一个Period 只有天单位 如 10282 天 得到正确的结果 有什么需要注意的吗 public static void main String arg
  • 从 HttpClient 3 转换为 4

    我已经成功地对所有内容进行了更改 但以下内容除外 HttpClient client HttpPost method client new DefaultHttpClient method new HttpPost url InputStr
  • Cucumber DataTable 错误 - io.cucumber.datatable.UndefinedDataTableTypeException:无法将 DataTable 转换为 cucumber.api.DataTable

    尝试使用 cucumber selenium java intelliJ 运行场景 但在其中一个步骤中出现有关 DataTable 的错误 在我开始使用测试运行程序并更改周围的一些内容之前 数据表工作正常并正确转换该步骤的参数 但我就是无法
  • 是否有最新的 Facebook Java SDK? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 好像没找到最近更新的 如果没有 是否有一个好的 Java 库来执行与 Facebook 的 API 交
  • 配置jmxremote时无法正常停止tomcat

    我添加了一个jmxremotecatalina bat中的配置 set JAVA OPTS Dcom sun management jmxremote port 9004 Dcom sun management jmxremote ssl
  • java swing:向 JTree 项目添加自定义图形按钮

    我想在 JTree 中的项目右侧添加一个带有小图标的附加按钮 这可以做到吗 如果是这样 怎么办 thanks Clamp 你在这方面成功了吗 我想做同样的事情 但很难让 JButton 响应用户 设置渲染器以显示按钮的过程很顺利 但所有鼠标
  • Java和手动执行finalize

    如果我打电话finalize 在我的程序代码中的一个对象上 JVM当垃圾收集器处理这个对象时仍然再次运行该方法吗 这是一个大概的例子 MyObject m new MyObject m finalize m null System gc 是
  • CXF:通过 SOAP 发送对象时如何排除某些属性?

    我使用 Apache CXF 2 4 2 当我将数据库中的某个对象返回给用户时 我想排除一些属性 例如密码 我怎样才能做到这一点无需创建临时的班级 有这方面的注释吗 根据 tomasz nurkiewicz 评论我应该使用 XmlTrans
  • 使用自定义比较器在 Java 中创建 SortedMap

    我想创建一个TreeMap在 Java 中具有自定义排序顺序 排序后的键是字符串 需要根据第二个字符进行排序 这些值也是字符串 示例地图 Za FOO Ab Bar 您可以像这样使用自定义比较器 Comparator
  • 如何使用注释处理 Hibernate 和 Spring 中的连接查询?

    我正在使用 Spring 和 Hibernate 以及 MySQL 开发应用程序 我是 Hibernate 新手 完成了基本任务 现在我需要在选择查询中应用联接以使用注释从多个表中获取数据 我已经搜索过但仍然没有任何想法 这是我的数据库表和
  • 你能快速告诉我这个伪代码是否有意义吗?

    我相信我的代码现在是万无一失的 我现在将写出伪代码 但我确实有一个问题 为什么 DRJava 要求我返回 if 语句之外的内容 正如你所看到的 我为 ex 写了 return 1 只是因为它问了 但是它永远不会返回该值 谁可以给我解释一下这

随机推荐

  • ubuntu20.04 下使用cgroup 限制内存

    本实践的主要操作请参照 参考链接 进行 由于在实践中主要想完成的目标是限制服务器中用户 用户组的内存使用 xff0c 防止某个用户占用过多的cpu 内存导致其他用户无法正常使用甚至服务器宕机 xff0c 因此需要手动加cgexec指令的实验
  • 通过github action完成自动多平台编译和docker推送

    简介 因为一个小项目 xff0c 之前一直是手动制作镜像 xff0c 现在需要用docker部署 xff0c 然后还要基于arm64编译 xff0c 想着不如实践一下 xff0c 学习一下github action和Dockerfile的编
  • 让你的 STM32Cube KEILV5 + HAL库工程支持C++开发

    前言 最近这段时间在弄一个新的STM32F4的项目 xff0c 因为工程比较庞大 xff0c 然后各种类型也比较复杂 xff0c 在封装整理的时候就非常头疼 xff0c 很想通过C 43 43 的类 xff0c 继承 xff0c 多态的方式
  • ESP8266 TCP ERROR CLOSED的常见原因及解决办法

    前言 最近在使用ESP8266的简单AT指令做串口透传 xff0c 本来想着和HC 05的蓝牙串口差不多简单吧 xff0c xff0c 结果发现ESP8266似乎并没有像HC 05那么易用 xff0c 需要配置的东西还挺多的 xff0c 而
  • (二)TCP客户端/服务器通信------select函数

    xff08 一 xff09 select函数 该函数允许进程指示内核等待多个事件中的任何一个发生 xff0c 并只在有一个或多个事件发生或经历一段指定的时间后才唤醒它 也就是说 xff0c 我们调用select告知内核对哪些描述符 xff0
  • QGC参数请求流程(第一集)

    xff31 xff27 xff23 参数请求流程 xff08 第一集 xff09 联系作者 QQ 843230304 如流程图所示 xff1a 对应 xff31 xff27 xff23 的ParameterManager模块 xff0c 这
  • 航模螺旋桨型号

    1 有两个重要的参数 xff0c 桨直径和桨螺距 xff0c 单位均为英寸 比如8060桨 xff0c 就是说这个桨直径是8英寸 即8 2 54 xff1d 20 32厘米 螺距则为6英寸 螺距则代表桨旋转一周前进的距离
  • 用Java代码实现选择排序法

    package com hu controller public class Test public static void main String args 声明一个整形的数组 并手动输入几个数 int arr 61 11 665 985
  • C语言递归的方法实现斐波那契

    int fib int n void main int n 61 10 int result 61 fib n printf 34 d 34 result int fib int n if n gt 61 3 原题目这里是if n gt 6
  • 支持ie7,ie8,ff,不完全支持ie6的js日期控件

    var MonthDNum 61 new Array 0 31 28 31 30 31 30 31 31 30 31 30 31 var MonthText 61 new Array 34 34 34 一月 34 34 二月 34 34 三
  • oracle主键生成方式

    oracle主键 两种方法 自增主键sequence SYS GUID 生成唯一序列 一 自增主键 创建一个表 create table test NID int PRIMARY KEY oracle主键 两种方法 自增主键sequence
  • Vmware vSphere(一)安装vSphere client 以及 ubuntu

    大致流程见附件 VMware Tools 安装 xff0c 使用 xff0c 命令 xff1a vmware toolbox http blog csdn net dzassn article details 1633577 vmware
  • syslog 协议及格式

    官方文档 xff1a http tools ietf org html rfc5424 6 Syslog Message Format 6 2 HEADER 6 2 1 PRI PRI 61 lt Facility 0 23 8 43 Se
  • chm打不开

    chm文件打开看不到右边的内容 1 操作系统为了安全对下载的chm文件进行了锁定 xff0c 只需要在打开前右键单击该chm文件选择 属性 xff0c 然后在 常规 选项卡的下方单击 解除锁定 按钮就可以了 2 如果还是不能看 xff0c
  • 形式语言与自动机笔记

  • 关于Keil开发C51单片机的头文件问题

    我用的德飞莱的资料 在学习STM32中回想起学C51单片机时 xff0c 有个问题一直没解决 xff0c 就是头文件regx52 h和reg52 h的区别 因为在引用regx52 h时 xff0c 可以直接用P1 1 P3 2这些小口 但是
  • JAXB(二)Map属性映射

    JAXB support Collection List Set does not support Map not Collection XmlAdapter lt ValueType BoundType gt use List to im
  • JAXB(三)xsd 验证

    现在只有最简单的关联映射验证 关键点 xff1a jaxbMarshaller setSchema sch 还不会验证集合类型 xff1a List Set Map 以后再把JAXB xff08 二 xff09 的例子加上 xff0c 64
  • jstat

    http blog csdn net swpihchj article details 8197204
  • Effctive Java 笔记

    8 重写equals xff0c 只适合值类 xff08 枚举类除外 xff09 自反性 xff1a x equals x 61 61 true 对称性 x equals y 61 61 true 必然 y equals x 61 61 t