【发布时间】:2011-04-26 19:06:21
【问题描述】:
如标题中所问,我可以在其中创建一个“普通”公共课程和一些 public static foo() 吗?谢谢!
【问题讨论】:
如标题中所问,我可以在其中创建一个“普通”公共课程和一些 public static foo() 吗?谢谢!
【问题讨论】:
简短易懂:是的。
(但你为什么不简单地尝试一下?)
【讨论】:
一种常见的方法是像这样声明一个实用程序类
package my.package;
public class Utility {
private Utility() {
}
public static void foo() {
}
}
如果这个类在你的类路径中,你总是可以从任何地方做
my.package.Utility.foo();
【讨论】:
是的,你可以。
你认为困难在哪里?
您可以在 Jakarta Commons Lang 中查看流行的实用程序类(例如 StringUtils)作为示例。您正在考虑的一些非常常见的功能可能已经存在于 Commons 系列库之一中。
【讨论】:
public static function() 是否可以?非常感谢!
是的...你可以做到的..
【讨论】:
如果您对您的需求可能会改变,您可能需要不同版本的某些方法进行测试等有一点怀疑,那么请使用接口和类,例如:
public interface Utils {
public final static Utils INSTANCE = new MyUtils();
Foo makeFoo();
Bar transform(Foo foo)
}
public class MyUtils implements Utils {
public Foo makeFoo() { return new Foo(); }
public Bar transform(Foo foo) { return new Bar(foo); }
}
这使得切换到其他实现变得容易。当您决定开始使用像 Guice 这样的 DI 框架时,您遇到的问题会更少:
public class Client {
private final Utils util;
@Inject
Client(Utils utils) { //<--- Here Guice will inject for you what you specified
this.utils = utils;
}
}
【讨论】:
Utils.INSTANCE.makeFoo() 而不是 Utils.makeFoo(),它为您提供与普通实用程序类相同的功能,只是更灵活。