java - 生成自身实例的静态类

标签 java

<分区>

在静态方法中实例化自身实例然后使用该对象而不是静态地执行所有操作的缺点是什么?

假设我有这样一个类:

public class MyClass {
    private String foo;
    private String bar;

    private MyClass(String foo, String bar) {
        this.foo = foo;
        this.bar = bar;
    }

    public static String concat(String foo, String bar) {
        MyClass myClass = new MyClass(foo, bar);
        return myClass.concatStrings();
    }

    private String concatStrings() {
        return foo + bar;
    }
}

此模式的好处是我不必将输入参数传递给各种私有(private)方法。我能想到的唯一不好的事情是,创建一个我并不真正需要的对象可能是一个性能问题。但是在这个非常简单的例子中,我只注意到与像这样的简单静态类相比有很多迭代(即>=10^8)的真正区别(在快速 junit 测试中):

public class MyStaticClass {
    public static String concat(String foo, String bar) {
        return foo + bar;
    }
}

还有其他支持或反对这种模式的论据吗?

最佳答案

我认为这里的问题是 static 本身的使用(是 procedural ,有一些 disavantagesharder to test )。大多数时候,这个带有静态方法的实用程序可以用其他东西代替 using OOP .所以,我的建议:

public class MyClass {
    private String foo;
    private String bar;

    MyClass(String foo, String bar) {
        this.foo = foo;
        this.bar = bar;
    }

    public String concatFooBar() {
        return new Concat(foo, bar).getResult();
    }

}

实用类:

public final class Concat {
    private String foo;
    private String bar;

    Concat(String foo, String bar) {
        this.foo = foo;
        this.bar = bar;
    }

    String getResult() {
        return foo + bar;
    }

}

关于java - 生成自身实例的静态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47550565/

相关文章:

java - 验证硬退回的电子邮件 ID

java - 可执行 jar 文件找不到 main

java - 在 "infinite"循环线程中运行代理是错误的?

java - 如何使用java代码与系统命令行交互

java - 用 lwjgl 绘制玩家(一个简单的矩形)没有什么作用

java - ActiveMQ 代理能够处理的最大主题数是多少?

java - 为什么在 float 的末尾使用字母 f?

java 。编译/执行 2 .java 1 包命令行

java - JSF + Tomcat 丢失 CSS

Java程序递归反转数组