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:匿名本地类与命名类 的相关文章

  • Java 客户端到服务器未知来源

    我有一个简单的乒乓球游戏 需要通过网络工作 服务器将创建一个带有球和 2 个球棒位置的游戏 当客户端连接到服务器时 服务器将创建一个名为 PongPlayerThread 的新类 它将处理客户端到服务器的输入和输出流 我的服务器工作100
  • Eclipse Oxygen - 该项目未构建,因为其构建路径不完整

    我刚刚安装了 Eclipse Oxygen 并尝试在工作台中打开现有项目 但收到此错误 该项目未构建 因为其构建路径不完整 不能 找到 java lang Object 的类文件 修复构建路径然后尝试 建设这个项目 我尝试右键单击该项目 转
  • 在 libgdx 中渲染 box2d

    我有一个使用 FitViewport 的大小为 800x480 的游戏世界 并且最初使用像素渲染 box2d 实体 固定装置 因此所有物理效果都显得浮动且缓慢 查看文档后 我意识到 box2d 使用度量单位 因此我将 box2d 位置和大小
  • Eclipse RCP - 将视图与编辑器区域堆叠?

    在开发 Eclipse RCP 应用程序时 是否可以将视图与编辑器区域堆叠在一起 像这样 我有多个列表 表格 我想创建一种预览组合 当通过单击鼠标选择列表上的项目时 我希望我的预览合成显示该项目的数据 如果用户双击某个项目 我想在预览合成后
  • 合并和颜色样式不适用于 Apache POI excel 2003 格式

    在 Apache POI 中 我为某些单元格应用了一些样式并合并了这些单元格 当我在 2010 年或 2007 年打开时 它工作正常 但在 2003 年 格式样式消失了 每次保存 2003 Excel 文件之前都会弹出兼容性检查对话框 请参
  • 我可以使用 Selenium Webdriver 测试元素的顺序吗?

    有一个表单 其中有 3 个字段 具有 3 个不同的 ID fieldset div div fieldset
  • 如何在java中从包含.0的浮点数中删除小数部分

    我只想删除包含的浮点数的小数部分 0 所有其他数字都是可以接受的 例如 I P 1 0 2 2 88 0 3 56666 4 1 45 00 99 560 O P 1 2 2 88 3 567 4 1 45 99 560 有什么方法可以做到
  • Android jUnit 测试 java.lang.NoClassDefFoundError: android/database/sqlite/SQLiteOpenHelper

    我正在尝试运行一个模拟子类的单元测试SQLiteOpenHelper但我收到以下错误 java lang NoClassDefFoundError android database sqlite SQLiteOpenHelper at ja
  • 使用 Haskell 将函数注入到 Java .class 文件中

    我使用 Haskell 编写了一个 Java 字节码解析器 它工作得很好 然而下一步让我完全难住了 我的 Haskell 程序需要修改 class 文件 以便在执行时 Java 程序打印 输入 此处的方法名称 在执行方法之前 并且 退出 此
  • 如何运行传递给模拟方法的 lambda 函数?

    我想知道是否可以运行作为参数传递给模拟函数的 lambda 函数 并在调用模拟方法时运行它 我正在使用 Mockk 我想象代码是这样的 class DataManager fun submit lambda Int gt Unit val
  • 屏幕方向更改后应用程序崩溃

    我有以下问题 启动后 应用程序工作正常 即使在更改屏幕方向后也是如此 应用程序尚未准备好处理方向更改 例如替代布局等 因此仅显示旋转的默认布局就可以了 但是 当我通过按后退键离开应用程序 更改方向并在再次启动应用程序后立即崩溃 崩溃后 如果
  • Jersey 和 Spring 中的全局异常处理?

    我正在使用 Jersey 和 Spring 3 2 以及 Open CMIS 开发 RESTful Web 服务 我没有使用 Spring 的 MVC 模式 它只是 Spring IOC 和 Jersey SpringServlet 控制器
  • 在 Apache Servicemix 4 中的 OSGi 包之间共享配置文件?

    有人能够在 SMX4 中的两个或多个捆绑包之间成功共享配置吗 我正在寻找的是这样的 有一个文件 SMX HOME etc myconfiguration cfg 使此配置 可用 以便使用 Spring dm 通过 OSGi 配置管理将其注入
  • Java DNSLookup MX 记录列表。类似于 MXToolBox

    我正在构建一个程序来列出域的所有 MX 记录 起初似乎工作正常 但与在线工具进行比较后http mxtoolbox com http mxtoolbox com 有些域程序无法获取 MX 记录 而 MXToolbox 可以 我不确定原因是什
  • 短 2 个字节

    我正在从串行端口读取一个长度为 133 字节的数据包 最后 2 个字节包含 CRC 值 我使用 Java 将 2 个字节值制成单个 我认为很短 这就是我所做的 short high 48 0x00ff short low 80 short
  • 将一个整数从 C 客户端发送到 Java 服务器

    我使用此代码将一个整数从我的 Java 客户端发送到我的 Java 服务器 int n rand nextInt 50 1 DataOutputStream dos new DataOutputStream socket getOutput
  • 按钮悬停和按下效果 CSS Javafx

    我是 CSS 新手 为按钮定义了以下 CSS 样式 其中id并且应用了自定义样式 但不应用悬停和按下效果 bevel grey fx background color linear gradient f2f2f2 d6d6d6 linear
  • Android 10 通知彩色操作按钮

    I m trying to color the buttons Action in Notification like this So far this is what i m achieved so far 下面是我正在使用的代码 通知服
  • 没有运算符与给定名称和参数类型匹配。您可能需要添加显式类型转换。 -- Netbeans、Postgresql 8.4 和 Glassfish

    我正在尝试使用 EclipseLink 在 Glassfish 中使用 JPA 编辑 Postgresql 中的表 当我插入一个实体时 它运行良好 但是 当我尝试编辑或删除同一实体时 它失败并出现以下错误 任何想法 Caused by Ex
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li

随机推荐

  • 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