Java静态类与建造者模式

2023-05-16

Java里静态类都是静态内部类。静态类可以声明普通、静态成员变量和方法,但是只能访问外部静态的成员变量和方法,不能访问外部的非静态方法和属性。普通的内部类不能声明静态成员和方法,但是可以访问外部。

还有一个就是初始化的区别,静态内部类可以单独直接初始化,就像这样:

StaticInner si = new Outer.StaticInner();

普通内部类构造方法:

Outer o = new Outer();

Inner  i = o.new Inner();

什么时候需要静态内部类呢?当外部需要使用到内部类,但是内部类不需要外部类资源,并且内部类可以单独创建的时候就考虑静态内部类,同时,如果构造器有多个参数且参数可选的时候,可以使用静态内部工厂。如果不确定参数个数,也应该用建造者模式:

这是Effective Java上的例子:

public class Outer {

    private String name;

    private int age;

 

    public static class Builder {

        private String name;

        private int age;

 

        public Builder(int age) {

            this.age = age;

        }

 

        public Builder withName(String name) {

            this.name = name;

            return this;

        }

 

        public Builder withAge(int age) {

            this.age = age;

            return this;

        }

 

        public Outer build() {

            return new Outer(this);

        }

    }

 

    private Outer(Builder b) {

        this.age = b.age;

        this.name = b.name;

    }

}

 

静态内部类调用外部类的构造函数,来构造外部类,由于静态内部类可以被单独初始化说有在外部就有以下实现:

public Outer getOuter()

{

    Outer outer = new Outer.Builder(2).withName("Yang Liu").build();

    return outer;

}

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

Java静态类与建造者模式 的相关文章

  • 方法返回类型前的 是什么意思?

    下面的方法返回一个List组成T类型元素 public
  • 枚举的子类化

    有没有一种简单的方法来子类化Javaenum 我问这个问题是因为我有大约 10 个实现相同接口的对象 但它们对某些方法也有相同的实现 因此我想通过将所有相同的实现放置在扩展的中间对象中来重用代码Enum它也是我需要的所有其他类的超类 或许事
  • 使用 proguard 混淆文件名

    我正在使用 proguard 和 Android Studio 混淆我的 apk 当我反编译我的apk时 我可以看到很多文件 例如aaa java aab java ETC 但我项目中的所有文件都有原始名称 有没有办法混淆我的项目的文件名
  • 在不支持 CAS 操作的处理器上进行 CompareAndSet

    今天 我在一次采访中被问到下一个问题 如果您在具有不支持 CAS 操作的处理器的机器上调用 AtomicLong 的compareAndSet 方法 会发生什么情况 您能否帮我解决这个问题 并在可能的情况下提供一些全面描述的链接 From
  • 如何在 Android 应用程序中隐藏 Flutterwave API 密钥

    我正在构建一个 Android 应用程序 目前正在将 Flutterwave 集成到我的应用程序中以进行支付 建议我永远不要将 Flutterwave API 密钥放在我的应用程序上 那么我该如何隐藏这些键呢 我正在使用 Retrofit
  • Java LostFocus 和 InputVerifier,按反向制表符顺序移动

    我有一个 GUI 应用程序 它使用 InputVerifier 在产生焦点之前检查文本字段的内容 这都是很正常的 然而 昨天发现了一个问题 这似乎是一个错误 但我在任何地方都找不到任何提及它的地方 在我将其报告为错误之前 我想我应该问 我在
  • 我们可以有条件地声明 spring bean 吗?

    有没有一种方法可以有条件地声明 Spring bean 例如
  • java中如何知道一条sql语句是否执行了?

    我想知道这个删除语句是否真的删除了一些东西 下面的代码总是执行 else 是否删除了某些内容 执行此操作的正确方法是什么 public Deleter String pname String pword try PreparedStatem
  • getCurrentSession 在网络中休眠

    我正在使用 hibernate 和 jsp servlet 编写一个基于 Web 的应用程序 我读过有关sessionFactory getCurrentSession and sessionFactory openSession方法 我知
  • 在 Spring 中为 @Pathvariable 添加类级别验证

    在发布这个问题之前 我已经做了很多研究并尝试了很多可用的解决方案 这是我陷入的棘手情况 我有一个 Spring 控制器 它有多个请求映射 它们都有 PathVariables 控制器如下所示 Controller EnableWebMvc
  • Mockito 和 Hamcrest:如何验证 Collection 参数的调用?

    我遇到了 Mockito 和 Hamcrest 的泛型问题 请假设以下界面 public interface Service void perform Collection
  • 无需递归即可对可观察结果进行分页 - RxJava

    我有一个非常标准的 API 分页问题 您可以通过一些简单的递归来处理 这是一个捏造的例子 public Observable
  • 如何自定义舍入形式

    我的问题可能看起来很简单 但仍然无法得到有效的东西 我需要自定义 Math round 舍入格式或其他格式以使其工作如下 如果数字是 1 6 他应该四舍五入到 1 如果大于或等于 1 7 他应该四舍五入到 2 0 对于所有其他带有 6 的小
  • 使用 Proguard 通过 Dropbox.com 库混淆 Android 应用程序

    我刚刚创建了一个需要 Dropbox com API 库的 Android 应用程序 我现在尝试在 发布 模式下构建应用程序 并希望在代码上运行混淆器以对其进行混淆 但是 每当我尝试运行 Proguard 时 都会收到以下错误 Progua
  • 如何向页面添加 HTML 页眉和页脚?

    如何使用 itext 从 html 源添加标题到 pdf 目前 我们已经扩展了 PdfPageEventHelper 并重写了这些方法 工作正常 但当我到达 2 个以上页面时 它会抛出 RuntimeWorkerException Over
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • Android计算两个日期之间的天数

    我编写了以下代码来查找两个日期之间的天数 startDateValue new Date startDate endDateValue new Date endDate long diff endDateValue getTime star
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • 使用 Apache 允许 Glassfish 和 PHP 在同一服务器中协同工作

    是否可以建立从 Java 到 php 文件的桥梁 我有一个用 Java 编写的应用程序 我需要执行http piwik org http piwik org 这是用 PHP 编写的 在服务器中 我正在运行 PHP 但无法从浏览器访问 php
  • 设置 TreeSet 的大小

    有没有办法像数组一样对 Java 集合中的 TreeSet 进行大小限制 例如我们在数组中 anArray new int 10 数组具有固定长度 在创建数组时必须指定该长度 A TreeSet当您向其中添加元素时会自动增长 您无法设置其大

随机推荐

  • 百度OCR接口使用

    最近在研究ocr识别 也对比了一些的方法 现在来介绍一下 调用百度提供的ocr接口 小量调用的话 是不收费的 1 首先 你要有一个百度账号 如果已经有的话 登录进去会进入到这样一个界面 点击 34 创建应用 34 创建成功后 返回应用列表
  • Python 元组(tuple)剖析详解

    目录 概念元组的常见操作 概念 元组 span class token punctuation span 是一个有序 span class token punctuation span 可重复的集合 特点 span class token
  • Dom型XSS跨站脚本攻击和防御

    在前面的文章中 xff0c 我们讲了持久型XSS和反射型XSS 我个人觉得这些命名真的很贴切 xff0c 反应了概念的本质 无论是持久型XSS还是反射型XSS 恶意的js脚本内容都需要由服务端返回给用户 xff0c 今天我们要说的Dom型X
  • 编译错误导致浪费10多分钟, 编译错误的提示:xxx does not name a type xxx

    最近 xff0c 我在google protobuf 协议文件xxx pb增加了结构体 类 请求字段 xff0c 生成xxx h和xxx cpp文件 xff0c 然后放到对应目录进行编译 xff0c 奇葩的是 xff0c 编译出错 xff0
  • 树莓派上安装php

    简单东西 xff1a sudo apt get install php 然后 xff1a pi 64 raspberrypi taoge cat test php lt php aa 61 60 echo 39 hello 39 39 xx
  • 结构体和数组

    结构体中可以有数组类型的成员 xff0c 数组的元素也可以是结构体 数组和结构体的初始化是一样的 xff0c 都是把各个元素放在一个大括号里 xff0c 各个成员用逗号分隔 结构体数组使用示例 include lt stdio h gt i
  • iOS聊天室 简单的对话聊天界面(cell自适应高度)

    文章目录 难点思路需要用到的方法的大致解析 xff08 只是简单的介绍 xff0c 如果想要仔细理解推荐再去看看别的博客 xff09 GitHub地址代码效果图 难点 因为聊天长度不一样 xff0c 需要设置自适应高度发送信息后 xff0c
  • navicat链接centos7数据库失败Authentication plugin ‘caching_sha2_password‘ cannot be loaded: dlopen(../Frame

    重新配置云上数据库 mysql u root p use mysql select user host plugin authentication string from user G ALTER USER root 64 IDENTIFI
  • C语言中以字符串形式输出枚举变量

    1 枚举应用说明 每个枚举常量对应一个整形数字 xff0c 很多时候可以像整形一样使用 xff1b 但是如果要求打印枚举变量名的字符串 xff0c 办法也有很多 xff0c 查看网上方法几乎都需要转换 xff0c 要么用数组 xff0c 下
  • 定时器初值的计算方法

    定时器初值的计算方法 1 xff1a 定义 用户时间 xff1a Tuser 寄存器位数 xff1a Rn xff08 n 为 8 16 32分别代表 0xFF 0xFFFF 0xFFFFFFFF xff09 初始值 xff1a TCONH
  • iOS开发之NSAttributedString使用

    本文介绍了NSAttributedString和NSMutableAttributedString的简单用法 一 NSAttributedString介绍 摘自NSAttributedString h文件 span class hljs c
  • 阿里云添加安全组规则

    阿里云添加安全组规则 可以 参考 阿里云官方文档 xff1a https help aliyun com document detail 25471 html spm 61 5176 11065259 1996646101 searchcl
  • latex章节引用

    方法 xff1a 在章节后面直接添加 label 即可 xff0c 引用的时候使用 ref 可以是任意字符 参考 xff1a LaTeX 引用章节 公式和图表 Xovee CSDN博客 latex引用图表
  • Python之pip命令指定安装源和版本

    背景 用pip安装依赖包时默认访问 https pypi Python org simple 该路径经常出现不稳定以及访问速度非常慢的情况 xff0c 国内厂商提供的一些pipy镜像可以加快下载速度 xff0c 目前可用的有 xff1a 清
  • 从教程开始学习Rabbitmq

    Rabbitmq 入门概念 首先来介绍下Rabbitmq的一些概念 xff1a Producer xff1a 生产者 xff0c 生产者负责发送信息 xff08 messages xff09 Queue xff1a 队列 xff0c 队列是
  • 要看的书籍或视频——Java后端

    书单 xff1a 算法与数据结构 xff1a 数据结构 xff08 严蔚敏 xff09 大话数据结构 如果觉得教材无聊就可以看大话系列 xff0c 印象中里面还有很多诗 剑指Offer 程序员面试金典 编程珠玑 编程之美 牛客网 43 le
  • 丑数问题——动态规划、Java

    题目描述 把只包含因子2 3和5的数称作丑数 xff08 Ugly Number xff09 例如6 8都是丑数 xff0c 但14不是 xff0c 因为它包含因子7 习惯上我们把1当做是第一个丑数 求按从小到大的顺序的第N个丑数 这道题使
  • 字符串的排列(全排列)——Java、回溯法

    题目描述 输入一个字符串 按字典序打印出该字符串中字符的所有排列 例如输入字符串abc 则打印出由字符a b c所能排列出来的所有字符串abc acb bac bca cab和cba 输入描述 输入一个字符串 长度不超过9 可能有字符重复
  • Dijkstra算法——java实现

    面试时遇到Dijkstra算法 这个算法我是知道的 但是没具体写过 所以答题比较慢 抽时间实现了下这个算法 nbsp Dijkstra算法基本思路 该算法的基本思路是这样的 从起始点开始 将未访问过的相邻节点加入一个优先队列 类似于广度优先
  • Java静态类与建造者模式

    Java里静态类都是静态内部类 静态类可以声明普通 静态成员变量和方法 xff0c 但是只能访问外部静态的成员变量和方法 xff0c 不能访问外部的非静态方法和属性 普通的内部类不能声明静态成员和方法 xff0c 但是可以访问外部 还有一个