Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 决定是实用程序类还是从基本活动继承_Java_Android_Inheritance_Utility Method - Fatal编程技术网

Java 决定是实用程序类还是从基本活动继承

Java 决定是实用程序类还是从基本活动继承,java,android,inheritance,utility-method,Java,Android,Inheritance,Utility Method,这更像是一个针对Android的最佳实践/性能相关问题(我理解这可能是一个一般性的讨论,但考虑到Android环境,我希望缩小讨论范围) 假设我有一个方法(检查条件并将用户重定向到各种活动)。许多类都使用此方法 我无法决定是否在实用程序类中添加此方法,将其设为静态,并从每个需要它的活动中调用它 或 创建一个基本活动,在其中添加方法,需要使用此方法的任何活动都从基本活动继承。(假设在这种特殊情况下我们可以使用单一继承) 想法 编辑 这些都是相关的,所以我已经检查了与此相关的帖子。无法根据这些做出决

这更像是一个针对Android的最佳实践/性能相关问题(我理解这可能是一个一般性的讨论,但考虑到Android环境,我希望缩小讨论范围)

假设我有一个方法(检查条件并将用户重定向到各种活动)。许多类都使用此方法

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

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

想法

编辑 这些都是相关的,所以我已经检查了与此相关的帖子。无法根据这些做出决定


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

例如,一些伪代码:

您的
实用程序
类:

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
}
实用程序锁

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

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

我建议您调用实用程序来完成工作,然后在活动中创建回调方法来响应结果,实用程序方法不应该知道ui-elements@SarthakMittal谢谢但是我想知道的是,是什么帮助你做出这个决定,使用实用类而不是使用基本活动,将方法移动到其中,并通过使用此方法的任何活动继承此类?我通常将继承过程作为最后手段,因为我们只能扩展一个类,如果只有一些类会使用该方法,那么最好使用接口,不过,如果所有活动都需要该方法,那么创建一个基类也是可以的。单继承无疑是一个值得考虑的问题。但正如我在问题中提到的,我想知道如果这不是一个问题,还有什么其他因素会影响我选择实用课程的决定。总之,这个链接非常有用,可以得出一个结论-谢谢。我不太明白你的意思,太好了。这澄清了你的答案。我真正感兴趣的是-是什么帮助你决定使用实用类而不是使用基类,在其中移动方法以及任何继承该基类方法的子类?有很多原因,其中一些被列在这个网站上()此外,测试和更改注入类的能力非常好用,并且给出了IOC容器的用法。