Android应用跨Activity复用函数优化:对标Basic Module结构咨询
优雅拆分Android通用静态方法:类似Basic Module的实现方案
嘿,这个问题我太有共鸣了——把通用静态方法硬塞在MainActivity里确实既不优雅也不符合单一职责原则,每次调用还要敲MainActivity.someFunction(),属实啰嗦。刚好Java/Kotlin里有完美对应你说的Basic Module的方案,咱们一步步来优化:
Java 实现方案
1. 独立工具类(最常用)
创建一个final修饰的工具类,把所有通用静态方法放进去,同时加私有构造函数防止被实例化:
public final class MathUtils { // 私有构造函数:禁止外部创建实例 private MathUtils() { throw new AssertionError("这个工具类不能被实例化哦"); } public static int someFunction(int arg1) { return arg1 * arg1; } // 可以添加更多同类型通用方法 public static int calculateSum(int a, int b) { return a + b; } }
调用时直接写MathUtils.someFunction(5),比绑在MainActivity上清爽太多,而且代码职责划分更清晰。
2. 静态导入:实现无类名调用
如果想完全复刻Basic那种“不用写模块名直接调用”的体验,Java支持静态导入:
在需要调用的Activity顶部添加:
import static com.your.app.package.MathUtils.someFunction; import static com.your.app.package.MathUtils.calculateSum;
之后就能直接写someFunction(5)或者calculateSum(2,3),完全符合你想要的Module调用感。
Kotlin 实现方案(更简洁)
如果你的项目用Kotlin,那实现起来更丝滑,有两种方式:
1. 顶层函数(推荐)
直接在一个kt文件里写函数,不需要类包裹——这完全就是Basic Module的翻版:
// MathUtils.kt fun someFunction(arg1: Int): Int { return arg1 * arg1 } fun calculateSum(a: Int, b: Int): Int { return a + b }
调用时直接写someFunction(5)就行,Android Studio会自动帮你导入,连手动加import都省了,极致简洁。
2. Object 类(适合需要静态初始化逻辑)
如果你的通用方法需要一些初始化逻辑(比如加载配置、初始化常量),可以用object类(Kotlin的单例类,默认所有成员都是静态可访问的):
object MathUtils { init { // 静态构造逻辑,比如初始化全局常量 println("MathUtils模块初始化完成") } fun someFunction(arg1: Int): Int { return arg1 * arg1 } }
调用时写MathUtils.someFunction(5),同样可以通过静态导入省略类名:
import com.your.app.package.MathUtils.someFunction
一些最佳实践提醒
- 单一职责:别把网络请求、UI工具、数学计算的方法塞在同一个类里,拆分出
NetworkUtils、UiUtils、MathUtils这类针对性的工具类,维护起来更轻松。 - 避免内存泄漏:如果工具方法需要Context,一定要传
Application Context,别传Activity Context,不然容易造成内存泄漏。 - 无状态设计:静态方法尽量保持无状态,别依赖全局可变变量,避免线程安全问题。
内容的提问来源于stack exchange,提问作者Bogdan Samchuk
相关产品推荐
相关产品推荐

