非静态初始化块的替代方案是什么?

2024-02-24

我的项目有一些开发人员喜欢非静态初始化块.

是什么选择对此,什么是downside这个替代方案?我猜想:初始化中的值构造函数?

为什么我们应该使用非初始化块?


首先,在那里将 test 初始化为 new String() 是没有意义的,因为初始化块立即将其分配给其他内容。无论如何...

一种替代方法是在声明处初始化:

public class BlockTest {
    String test = "testString";
}

另一个是在构造函数中:

public class BlockTest {
    String test;
    public BlockTest () {
        test = "testString";
    }
}

这是两个主要的常见选项。

初始化块有两个主要用途。第一个是对于在初始化期间必须执行一些逻辑的匿名类:

new BaseClass () {
    List<String> strings = new ArrayList<String>();
    {
        strings.add("first");
        strings.add("second");
    }
}

第二个是公共初始化,必须在每个构造函数之前发生:

public class MediocreExample {
    List<String> strings = new ArrayList<String>();
    {
        strings.add("first");
        strings.add("second");
    }
    public MediocreExample () {
        ...
    }
    public MediocreExample (int parameter) {
        ...
    }
}        

但是,在这两种情况下,都有不使用初始化块的替代方案:

new BaseClass () {
    List<String> strings = createInitialList();
    private List<String> createInitialList () {
        List<String> a = new ArrayList<String>();
        a.add("first");
        a.add("second");
        return a;
    }
}

And:

public class MediocreExample {
    List<String> strings;
    private void initialize () {
        strings = new List<String>();
        strings.add("first");
        strings.add("second");
    }
    public MediocreExample () {
        initialize();
        ...
    }
    public MediocreExample (int parameter) {
        initialize();
        ...
    }
}        

做这些事情的方法有很多种,使用最合适的方式并提供最清晰和最容易维护的代码。

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

非静态初始化块的替代方案是什么? 的相关文章

  • 如何在 JPanel 上绘制后重新绘制它?

    我有一个继承自 JPanel 的组件 我在上面绘制了一个网格 现在我有一个 JComboBox 我希望用户能够在此处选择网格大小 然后按按钮进行网格更改 重新绘制网格 问题是它绘制了初始网格 但是一旦用户从 JComboBox 选择网格大小
  • 将 CSV 文件读入 Java 作为数据库表

    我发现了很多关于使用 Java 读取 CSV 的帖子 并且他们所指向的 API 在读取 CSV 文件时都采用了面向行的方法 就像 当你得到一行时 获取每一列的值 我希望有一个更高级别的 API 比如在 Perl 中 DBI 允许您在 CSV
  • 使用比较器对对象进行排序给出空指针

    我正在尝试对包含 3 张卡的 ArrayList 进行排序 我正在用比较器来做这件事 这是否太过分了 Card getRank 返回 2 到 14 之间的整数 我完全不知道哪里出了问题 我之前已经成功完成了这个 并与我的其他代码进行了比较
  • 谁能解释一下 servlet 映射吗?

    我正在尝试使用 SpringMVC 编写一个 Web 应用程序 通常我只是将一些虚构的文件扩展名映射到 Spring 的前端控制器并快乐地生活 但这次我要使用类似 REST 的 URL 没有文件扩展名 将我的上下文路径下的所有内容映射到前端
  • java.sql.SQLException: ORA-01005: 给定的密码为空;登录被拒绝

    我在尝试连接到数据库时遇到以下异常 java sql SQLException ORA 01005 null password given logon denied at oracle jdbc driver T4CTTIoer proce
  • Jackson Json 将对象反序列化为列表

    我正在使用 Spring 的 Web 服务RestTemplate并反序列化Jackson 在来自服务器的 JSON 响应中 其中一个字段可以是对象或列表 这意味着它可以是 result or result 有没有办法通过对我要反序列化的类
  • 包含小时、分钟和秒的周期[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要一个代表年 月 周 日 小时 分钟 秒的间隔数据类型 前三年 年 月 日 可以用Period最后
  • 如何检查字符串是否具有特定模式[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 用户输入任意字符串 程序会区分该字符
  • RSA 加密-解密:BadPaddingException:数据必须以零开头

    对于一个被问了很多次的问题 我很抱歉向您询问您的技能 我有一个关于 RSA 加密的问题 我已经检查过有关此问题的其他主题 但没有找到任何有用的答案 我希望你能帮助我 我想读取一个文件 加密其内容 然后解密它并将这些解密的字节放入一个新文件中
  • 可以向 @ManyToMany Hibernate 额外表添加额外字段吗?

    我有这两类 表 Entity Table name course public class Course Id Column name courseid private String courseId Column name coursen
  • Java 中的本机方法

    我花了一些时间学习什么是 Java Native 方法以及它们是在平台相关代码 主要是 C 中实现的 但是我在哪里可以找到这些 Java 的本机实现呢 例如 Thread 类的 sleep long millis 方法是本机的 但它的实现代
  • 在 JSP 中对表单操作使用相对路径

    如何在表单操作中使用相对路径
  • 首选项活动中的广告“没有足够的空间来显示广告!需要:<480, 75>,拥有:<432, 1073741823>”

    我试图在偏好活动中展示广告 但它从未出现 Logcat 始终显示消息 没有足够的空间来显示广告 想要 有 这就是我制作广告的方式 我对广告有自定义偏好 public class AdmobPreference extends Prefere
  • 可以混合使用 JVM 语言吗?即:Groovy 和 Clojure

    我知道你可以轻松地混合groovy java clojure java 无论什么JvmLang java 这是否也意味着我也可以让 clojure 和 groovy 代码进行交互 如果我使用 Grails 或 jRoR 我也可以在该环境中使
  • Java 泛型和数字类型

    我想创建一个通用方法来有效地执行此操作 class MyClass static
  • Spring @Value 添加验证小于

    我使用以下属性值注入 我如何向此操作添加小于验证 我的意思是我想设置一个验证user maxpassiveday可以说 财产价值不得低于 100 Value user maxpassiveday int maxpassiveday 使用Sp
  • 在openjdk:7-jre-alpine docker上如何安装python 3.6

    直到大约一周前 我才在 java 图像上成功使用 python 3 6 脚本 如下所示 FROM openjdk 7 jre alpine RUN apk update apk upgrade apk add no cache bash a
  • EclipseLink 2.7.0 和 JPA API 2.2.0 - 签名不匹配

    当运行由maven构建的具有以下依赖项的项目时
  • 如何确保超类的子类方法的线程安全?

    我参加了一次面试 并被要求为以下要求设计一个课程 假设我有一个 A 类 它可以有任意数量的子类 即子类 类 A 有一个名为 doSomething 的方法 该方法是同步的 要求是 A 的所有子类都是强制性的重写 doSomething me
  • 按字母顺序对对象的 ArrayList 进行排序

    我必须创建一个方法来排序数组列表根据电子邮件按字母顺序排列对象 然后打印排序后的数组 我在排序时遇到麻烦的部分 我已经研究过并尝试使用Collections sort vehiclearray 但这对我不起作用 我是因为我需要一个叫做比较器

随机推荐

  • 声明 Rails 模型子类的静态属性

    我是 Ruby 和 Rails 以及编程 的新手 并试图找出将属性从模型传递到其 STI 子项的惯用方法 我有一个通用模型 文档 以及一些从它继承的模型 让我们以 教程 为例 我有一个 图标 的字符串字段 我想在其中存储图标的文件名但不是完
  • Heroku 缺少模块

    我正在尝试将一个简单的 node js 服务器部署到 Heroku 但不断遇到此错误 Error Cannot find module morgan 我在用着morgan为了进行一些 HTTP 日志记录 我有 Morganpackage j
  • RSS Feed 和 Google 的 XML 适配器示例 - 它有效吗?

    我试图理解 Google 的 XML 适配器示例 如下所示http developer android com resources samples XmlAdapters index html http developer android
  • 如何在运行时从 appsettings.json 读取 CRON 表达式?

    我开发了具有多个计时器触发功能的网络作业项目 每个功能在一天中的不同时间执行 有些每分钟执行一次 有些每五分钟执行一次 有些一天执行一次 如果我在函数参数属性本身中编写 CRON 表达式 例如 ProcessTrigger2 TimerTr
  • 具有异步计时器的 Python 异步 Websocket 客户端

    我需要一个长时间运行的 websocket 客户端 它从 websocket 服务器接收推送消息 并且我需要监视客户端的连接状态 如果连接断开 我需要找出答案 我的方法是定期记录一个常量字符串 如果未检测到日志消息则触发警报 我的想法 1
  • 错误:任务“:app:processDebugGoogleServices”执行失败。将 com.google.android.gms 版本更新至 10.2.6

    我正在尝试通过 Firebase 在我的 Android 应用程序中实现 Google 登录 并且在 Gradle 同步后不断出现以下消息 错误 任务 app processDebugGoogleServices 执行失败 请通过更新 go
  • std::back_inserter 在较旧的 GCC 上需要 const_reference。为什么?

    我目前正在研究一些可以在较新版本的 GCC 上编译但不能在旧版本上编译的代码 就我而言 我使用的是std back inserter to std copy一些数据从一种数据结构到自定义数据结构 如果我忘记了typedef value ty
  • Laravel 4 作为 AngularJS 的 RESTful 后端

    我正在尝试构建一个 Web 应用程序 该应用程序应使用 Laravel 作为 RESTful 后端 API 并在客户端使用 AngularJS 我阅读了 Stackoverflow 上有关该问题的所有其他帖子 但没有人明确回答我的疑问 至少
  • 将 osm 文件导入 postgres/postgis 数据库

    我使用 osm2pgsql 工具将 osm 文件导入到 postgres 数据库中 并使用 phppgadmin 作为管理工具 我只从 osm 以 xml 格式下载了一个小镇 但在使用 mac 上的终端导入它时遇到了问题 我对此有点菜鸟 所
  • Optaplanner - 部署项目时无法编译 drools 文件

    我们使用 Java 11 开发了一个 SpringBoot 项目optaplanner core并在 Drools 文件中定义规则 我们在使用 JDK 的 IntelliJ 中运行应用程序没有任何问题 然后 我们将该应用程序部署到安装了 J
  • 如何基于JavaScript整理HTML代码

    我正在编写一个可以整理 HTML 代码的 JavaScript 函数 目前不需要整理 JavaScript 和 CSS 代码 这是我的代码 并检查一下http jsfiddle net 2q26K http jsfiddle net 2q2
  • PHP 和 Microsoft Access 数据库 - 连接和 CRUD

    我没有访问经验 如何使用和不使用更新 插入 删除 选择语句 rs new com ADODB RecordSet PDO 如果您想使用 PHP 与 MS Access 数据库交互 PDO http php net manual en boo
  • 为什么 jquery datepicker 不适用于文本区域而仅适用于输入

    请帮助我 我一无所知 当我尝试打开 jquery UI 的日期选择器并将其附加到输入标记时 它工作得很好 但是当我尝试将它附加到文本区域时 什么也没有发生 This will work
  • 更改 NavigationItem 提示时出现奇怪的动画

    我在故事板中添加了这些 ViewController 没有一个与自定义类相关 一切都来自纯故事板 iOS7 上的 iPhone 模拟器上的视频 https vid me Nu9E 仅当在 iOS7 上使用 AutoLayout 时才会发生这
  • Ruby 维护哈希插入顺序

    我正在寻找一种方法来维护我在 Ruby 中使用的哈希的插入顺序 我的数据来自数据库 并且已经按照我想要的方式分组 排序 但 Ruby 不保证在我的版本中保持哈希中的顺序1 8 4 有什么解决方法吗 如果没有 我可以创建自定义比较器吗 这是哈
  • Google Play 开发者控制台 - 发生意外错误。请稍后再试

    我正在尝试回复刚刚提供评分的用户 但是 从过去两周开始 我遇到了此错误 并且无法成功打开链接 您是否遇到此错误 或者我是唯一被 Google 瞄准的错误 帮助我为用户提供所需的支持 2020 年 7 月后 Google 更新了 Play 控
  • jquery 拖出时从 droppable 中移除

    我已经根据示例实现了 jQuery 的可拖放购物车演示 http jqueryui com droppable shopping cart 我希望能够删除 li 当您将其拖出 droppable 时 从 droppable 中删除 我认为这
  • 网站管理员 API v3:使用批量请求获取servingLimitExceeded

    我得到了servingLimitExceeded错误消息适用于批次内的结果 但不适用于整个批次 例如 我可能会收到 100 条记录响应此错误 然后它开始返回更多结果 全部在一个批次内 如果批次由 Google API 内部处理 我该如何调整
  • 指定 asp.net core 1.0 WebAPI.exe 应在 program.cs 中为 prod 和 dev 使用的 url(端口)

    我在我的 asp net core 1 0 web api NET Framework program cs 中执行以下操作 以指定我希望我的 web api exe 在哪个端口运行 仅用于开发目的 public static void M
  • 非静态初始化块的替代方案是什么?

    我的项目有一些开发人员喜欢非静态初始化块 是什么选择对此 什么是downside这个替代方案 我猜想 初始化中的值构造函数 为什么我们应该使用非初始化块 首先 在那里将 test 初始化为 new String 是没有意义的 因为初始化块立