java - 在实用程序类或继承自基本 Activity 之间做出决定

标签 java android inheritance utility-method

这更像是特定于 Android 的最佳实践/性能相关问题。(我知道这可能是一个通用的讨论,但我希望考虑到 Android 环境来缩小范围)。

假设我有一个方法(检查条件并将用户重定向到各种 Activity )。这个方法被很多类使用。

我无法决定是否将此方法添加到实用程序类中,将其设为静态并从需要它的每个 Activity 中调用它。

或者

创建一个基础 Activity ,在其中添加方法,任何需要使用此方法的 Activity 都继承自基础 Activity 。 (假设在这种特殊情况下我们可以接受单一继承)。

想法?

编辑 这些是我检查过的与此相关的相关 SO 帖子。无法根据这些做出决定

Utility classes are evil?

If a "Utilities" class is evil, where do I put my generic code?

最佳答案

还可以在需要时将类注入(inject)到构造函数中。当您使用这种方法时,您可以轻松地在接口(interface)后面模拟此类,并且可以使用模拟创建测试。

例如一些伪代码:

您的实用程序类:

public class Utility implements IUtility {
    @Override
    public void add() { ... }

    @Override
    public void remove() { ... }
}

您的实用程序使用类:

public class UtilityUsingClass {
    private IUtility utility;
    public UtilityUsingClass(IUtility utility) {
        this.utility = utility;
    }

    public void myMethod() {
        // Use Utility class
        utility.add();
        ...
    }
}

在测试中它看起来像这样:

@Test
public void testMyMethod() {
    UtilityUsingClass testClass = new UtilityUsingClass(new UtilityMock());
    testClass.myMethod();

    // assert stuff
}

UtilityMock:

public class UtilityMock implements IUtility {
    @Override
    public void add() { // Implements mock logic ... }

    @Override
    public void remove() { // Implements mock logic ... }
}

关于java - 在实用程序类或继承自基本 Activity 之间做出决定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38008355/

相关文章:

java - Jersey @Path 无法处理问号 ('?' )

Android 重力传感器值在方向变化时不正确

Typescript 子类继承的方法允许参数中未定义的键

c++ - 三法则与继承

java - 获取OpenEdge数据库中的rowid从1到n

java - jxBrowser 为 JavaFX 添加关键监听器

java - Facebook4j API : Search

java - 防止广告在后台展示 (Android Studio)

android - 如何将 if 语句与单选按钮一起使用

java - 使用 JPA 映射多态列表?