Java/Android:匿名本地类与命名类

2024-02-21

我想问使用匿名类与命名内部类的良好实践是什么?

我正在编写一个 Android 应用程序,其中包含许多 UI 元素(按钮、文本字段等)。对于他们中的许多人来说,我需要某种听众,所以onCreate在应用程序中,我有一堆非常小的匿名类,例如:

someButton.setOnClickListener(
    new View.OnClickListener() {
        public void onClick(View v) {
            // do something...
        }
    }
);

每个这样的匿名类都是 5 - 20 行,大小足够小,非常适合来自Java™ 简介 book:

一般来说,如果出现以下情况,您应该考虑使用匿名类而不是本地类:

  • 班级体形很短。
  • 仅需要该类的一个实例。
  • 该类在定义后立即使用。
  • 类的名称并不会让您的代码更容易理解。

但问题是,我认为onCreate变得相当大,并且通过快速查看代码变得更加难以阅读和理解。它仍然很容易理解,但太大了。

那么在这种情况下更好的做法是什么 - 有一堆小的内部子类,其中每个子类都很好地分开,但只使用一次,或者更好地继续使用匿名类?


我认为无论哪种方式都没有明确的答案。两种风格都很好用,这正是您喜欢的。

另一种选择是

每个 onClick 的内容都通过单个函数调用来实现,这将使匿名类非常简短。 IE:

someButton.setOnClickListener(
    new View.OnClickListener() {
        public void onClick(View v) {
            doSomeButtonClick();
        }
    }
);


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

Java/Android:匿名本地类与命名类 的相关文章

  • 如何模拟一个方面

    我目前正在使用aspectj 开发一些监控工具 因为这个工具应该是技术独立的 尽可能 所以我没有使用 Spring 进行注入 但我希望我的方面能够经过单元测试 方面示例 Aspect public class ClassLoadAspect
  • 如何查看Android Asset资源?

    我想检查 assets 文件夹中是否存在文件 我怎样才能做到呢 请帮忙 我向我的应用程序类之一添加了一个辅助方法 我假设 应用程序运行时 资产列表不会更改 the List
  • Android 设备 ID(不是 IMEI)

    我使用命令 adb devices 列出连接的设备 在我的电脑上我得到 附加设备列表 HT9CTP820988 器件 我的问题是 如何以编程方式获取此 id HT9CTP820988 你所看到的adb devices命令是序列号 序列号 创
  • 在 Mac 上使用 JRE 打开 jar 文件

    我有一个 jar 文件 旨在通过命令行运行 我不打算在运行应用程序的机器上进行任何java开发 我的思考过程是 因此我应该只需要JRE而不是JDK 此外 JDK 大约是 JRE 的 4 倍 我不想下载它 在 Mac 上安装 JRE 时 它不
  • android studio logcat 中字母的含义是什么? [复制]

    这个问题在这里已经有答案了 在 android studio 中运行应用程序时 会生成 logcat 并且每行的开头都有字母 这些字母的含义是什么 这些字母表用于各种日志选项 请参阅此链接 日志选项 https developer andr
  • android 从图库中选择图像

    我想从图库创建一个图片选择器 我使用代码 intent new Intent Intent ACTION PICK android provider MediaStore Images Media EXTERNAL CONTENT URI
  • 如何增加颤振中切屑的宽度

    我想增加宽度Chip 我怎样才能实现这个目标 Chip elevation 6 0 backgroundColor Colors white shape RoundedRectangleBorder borderRadius BorderR
  • java 属性文件作为枚举

    是否可以将属性文件转换为枚举 我有一个包含很多设置的属性文件 例如 equipment height equipment widht equipment depth and many more like this and not all a
  • 当容器大小更改时,JTable 仅调整选定列的大小

    对于面板内的 JTable 如果面板变大 我如何将额外的空间仅分配给某些列 在我的例子中 分配给最后一列 尽管提供 第 3 4 列和8 将获得额外的空间 我想允许用户手动更改所有列的列大小 我尝试了 table setAutoResizeM
  • 字节码和位码有什么区别[重复]

    这个问题在这里已经有答案了 可能的重复 LLVM 和 java 字节码有什么区别 https stackoverflow com questions 454720 what are the differences between llvm
  • @TestPropertySource 不适用于 Spring 1.2.6 中使用 AnnotationConfigContextLoader 的 JUnit 测试

    似乎我在 Spring 4 1 17 中使用 Spring Boot 1 2 6 RELEASE 所做的任何事情都不起作用 我只想访问应用程序属性并在必要时通过测试覆盖它们 无需使用 hack 手动注入 PropertySource 这不行
  • 是什么原因导致“对象不是声明类的实例”? [复制]

    这个问题在这里已经有答案了 可能的重复 使用反射调用方法时 为什么会出现 对象不是声明类的实例 https stackoverflow com questions 7202988 why do i get object is not an
  • Android:如何为我的应用程序播放的任何音乐文件创建淡入/淡出音效?

    我正在开发的应用程序播放音乐文件 如果计时器到期 我希望音乐淡出 我怎么做 我正在使用 MediaPlayer 播放音乐 音乐文件位于我的应用程序的原始文件夹中 这是我的 Android MediaPlayer 的整个处理程序类 查看 pl
  • Android 在通话期间播放音频文件[重复]

    这个问题在这里已经有答案了 对于我的 Android 应用程序 我想在从应用程序接听电话后播放音频文件 应用程序将发起电话呼叫 一旦接收者接听电话 应用程序应开始播放录制的音频文件 通过在谷歌上进行大量搜索 我发现这对于未root的设备来说
  • JDK 7 的快速调试/调试构建

    我正在寻找 JDK 的调试 或者我猜他们称之为快速调试构建 以启用在运行时生成的打印程序集以及查找性能问题时所需的其他诊断 就目前情况而言 我似乎找不到可以直接使用的 现成的 快速调试构建二进制包 有人可以帮我提供下载链接 或者至少提供有关
  • ActionBar 中的进度条

    我正在使用一个应用程序 它将在应用程序内部加载一个网站 现在我想在操作栏中添加一个进度栏 而无需向上滑动来抑制功能 像那样 我在用Fragment在我的应用程序中 WebviewFragment public class WebviewFr
  • 日期时间解析异常

    解析日期时 我的代码中不断出现异常错误 日期看起来像这样 Wed May 21 00 00 00 EDT 2008 这是尝试读取它的代码 DateTimeFormatter formatter DateTimeFormatter ofPat
  • 使用 Android 的 Mobile Vision API 扫描二维码

    我跟着这个tutorial http code tutsplus com tutorials reading qr codes using the mobile vision api cms 24680关于如何构建可以扫描二维码的 Andr
  • Java 9 中紧凑字符串和压缩字符串的区别

    有什么优点紧凑的字符串 http openjdk java net jeps 254JDK9 中的压缩字符串 压缩字符串 Java 6 和紧凑字符串 Java 9 都有相同的动机 字符串通常实际上是 Latin 1 因此浪费了一半的空间 和
  • 将隐藏(生物识别)数据附加到 pdf 上的数字签名

    我想知道是否可以使用 iText 我用于签名 或 Java 中的其他工具在 pdf 上添加生物识别数据 我会更好地解释一下 在手写板上签名时 我会收集签名信息 例如笔压 签名速度等 我想将这些信息 java中的变量 与pdf上的签名一起存储

随机推荐

  • selenium.common.exceptions.ElementNotVisibleException:消息:尝试使用 Python + Selenium 访问元素时元素不可见

    我尝试在以下网站中输入用户名和密码 https www thegreatcoursesplus com sign in https www thegreatcoursesplus com sign in driver webdriver C
  • SQL Server 错误 916

    当我尝试附加数据库时出现此错误 错误信息 发生异常 执行transact sql语句时 或批次 我已将数据库复制到 SQL Server 服务器的 Data 文件夹中 我想在 SQL Server 中配置数据库 但是当我尝试附加数据库时 出
  • 使用 CameraPreview 时获取 GPS 数据的问题

    我尝试编写一些 AR 应用程序 现在 我编写了一些代码来显示相机预览并从设备上的传感器 加速计 指南针 GPS 接收器 获取数据 当我在单独的应用程序中运行代码时 例如相机预览作为一个应用程序和作为第二个应用程序获取 GPS 数据的应用程序
  • 如何将多个外部侦听器注册到 d3 中的同一选择?

    我正在 d3 中编写一个项目 其中有一个 html 页面 其中包含两个外部 javascript 文件 例如script 1 js and script 2 js 我需要从 script 1 js 注册一个事件侦听器 从 script 2
  • pip 无法在 Mac 上的 docker 容器内安装软件包

    我正在关注Docker 入门 https docs docker com get started part2 将 docker 与 python 应用程序一起使用的指南 但是当 docker 执行命令时 RUN pip install r
  • 如何防止子视图与标签栏重叠?

    我有一个底部带有标签栏的视图 该视图被推送到导航控制器上 因此顶部也有一个导航栏 对于这个视图 我想显示一个表视图 它是我从它自己的笔尖创建的 当我将此视图添加为子视图时 它与选项卡栏重叠 有没有办法让这个子视图自动调整大小到顶部栏和底部栏
  • for 循环/for_each 的每次迭代可以并行完成吗? (C++11)

    我正在迭代结构向量并单独处理每个结构 它看起来像这样 for each begin data end data DoTask assume data is std vector
  • 具有固定标题的可滚动表格

    我为此在 PHP HTML CSS 中搜索了一些解决方案 但到目前为止没有任何效果 也许是因为大多数示例中的代码太多 所以我迷失了其中 有人可以向我解释我需要做什么或在这里放置一些简单的示例代码吗 使用 CSS 固定表头 最简单的是posi
  • 使 cURL 输出 STDERR 到文件(或字符串)

    我们正在尝试调试服务器上的一些 cURL 错误 我想查看 STDERR 日志 目前 我们只能看到错误 错误代码 7 并且无法连接到目标服务器 我们已经联系了主机并制定了特殊规则来打开我们需要的端口 我们甚至暂时忽略了证书 尽管如此 我们还是
  • 如何通过Java反射动态创建Java类?

    反射用于加载 java 类并动态操作它们 但我遇到了一个奇怪的问题 它问我如何通过 Reflection 即时创建 Java 类 我的意思是 在我们希望创建它们之前 这些类不会被编译或具有源代码 真的可能吗 有什么例子吗 你可以看一下Bea
  • 如何将 jsdoc 参数传递给 Web 请求?

    我有这样的功能 在 Node js Firebase 中 并且想知道如何添加 JSDoc 格式的文档 exports getUserRes functions https onRequest async request response g
  • 如何在click jQuery函数中正确传递$(this)

    我正在尝试用 jQuery 制作一个 tictactoe 项目 但遇到了一个大问题 瓷砖在 td 标签 我试图做到这一点 以便当用户单击图块时 它会调用 标记 功能 如果我们现在研究 标记 函数 this 旨在成为 td 调用该函数的节点
  • 带 List 参数的 Spring Cloud Feign Client @RequestParam 会创建错误的请求

    我有一个 Spring Cloud Feign Client 映射定义如下 RequestMapping method RequestMethod GET value search findByIdIn Resources
  • 无法完全删除 PyQt QGraphicsView 的边框

    我试过打电话self setStyleSheet background transparent border transparent 在 QGraphicsView 上 但它仍然在顶部边缘留下 1 像素边框 我也尝试过更换border tr
  • 更改 XML 元素顺序,同时保持结构层次结构和属性

    我希望更改某些 XML 元素的顺序 XML 很复杂 并且是由单独的进程生成的 我不需要更改它 因此我希望使用 XSLT 来纠正元素顺序 我不是 XSLT 专家 所以我查找了一些片段并发现了一些内容 并进行了一些小的更改以适合我的情况 alm
  • 如何使用 esc 键关闭灯箱页面叠加

    我有关于灯箱的问题请参阅我的jsFiddle http jsfiddle net sambodhiprem R9RGJ 4 单击其中一张图像将打开该画作的更大版本作为页面叠加层 How to use the ESC key to close
  • 使用 ImageMagick,如何才能看到所有可用的字体?

    ImageMagick 可以用给定的字体将文本绘制到图片中 我如何才能看到我的系统的所有可用字体 取决于您的 imagemagick 版本 convert list type for IM older than v6 3 5 7 conve
  • 如何从未连接的图中随机选择两个节点(节点对),Python,networkx

    我想从图中提取两个节点 问题是它们不应该连接 即它们之间不存在直接边 我知道我可以使用 random choice g edges 获得随机边缘 但这会给我连接的随机节点 我想要一对未连接的节点 一对未连接的边 帮帮我吧伙计们 谢谢 简单的
  • Eclipse CDT 自动替换“.”与“->”

    Qt Creator 有一个我非常喜欢的简洁功能 当我打字时obj method 它将自动替换句点 带有箭头 gt if obj是一个指针 其实是有道理的 你永远不想打字pointer something 这将是不合法的 有没有办法用Ecl
  • Java/Android:匿名本地类与命名类

    我想问使用匿名类与命名内部类的良好实践是什么 我正在编写一个 Android 应用程序 其中包含许多 UI 元素 按钮 文本字段等 对于他们中的许多人来说 我需要某种听众 所以onCreate在应用程序中 我有一堆非常小的匿名类 例如 so