如何制作一个可以在java中执行一些常见功能的公共模块?
正如标题中所问,我可以创建一个“公共”公共类并在其中创建一些公共静态foo吗?谢谢 简单明了:是的 但是你为什么不试试呢?简单明了:是的如何制作一个可以在java中执行一些常见功能的公共模块?,java,function,public,Java,Function,Public,正如标题中所问,我可以创建一个“公共”公共类并在其中创建一些公共静态foo吗?谢谢 简单明了:是的 但是你为什么不试试呢?简单明了:是的 但是为什么不干脆试试呢?一种常见的方法是像这样声明一个实用程序类 package my.package; public class Utility { private Utility() { } public static void foo() { } } 如果这个类在你的类路径上,你总是可以在任何地方做 my.package.Uti
但是为什么不干脆试试呢?一种常见的方法是像这样声明一个实用程序类
package my.package;
public class Utility {
private Utility() {
}
public static void foo() {
}
}
如果这个类在你的类路径上,你总是可以在任何地方做
my.package.Utility.foo();
一种常见的方法是像这样声明一个实用程序类
package my.package;
public class Utility {
private Utility() {
}
public static void foo() {
}
}
如果这个类在你的类路径上,你总是可以在任何地方做
my.package.Utility.foo();
是的,你可以
你认为困难在哪里
例如,您可以在Jakarta Commons Lang中看到流行的实用程序类。您正在考虑的一些非常常见的功能可能已经存在于Commons系列库中。是的,您可以
你认为困难在哪里
例如,您可以在Jakarta Commons Lang中看到流行的实用程序类。很可能您正在考虑的一些非常常见的功能已经存在于Commons系列库中。是的……您可以做到。是的……您可以做到。如果您对您的需求可能会发生变化、您可能需要不同版本的某些测试方法等有丝毫怀疑。,然后使用接口和类,例如:
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;
}
}
如果您对您的需求可能会发生变化、可能需要不同版本的某些测试方法等有丝毫怀疑,请使用接口和类,例如:
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;
}
}
谢谢我试过了,效果很好。然而,我只是想找到其他的可能性来填补它。下面的答案给了我一些线索。谢谢!我试过了,效果很好。然而,我只是想找到其他的可能性来填补它。下面的回答给了我一些线索。在面向对象编程中,对象是我们应该首先操作的东西,所以我关心的是:在不实例化真实对象的情况下使用公共静态函数“可以”吗?谢谢!是的,没关系。OO并不适用于所有情况。或者更确切地说,在StringUtils的情况下,这些方法可能是java.lang.String上的方法,但由于它们不存在,所以最好在其他地方使用静态方法。在OO编程中,对象是我们应该首先操作的,所以我关心的是:在不实例化真实对象的情况下使用公共静态函数“可以”吗?谢谢!是的,没关系。OO并不适用于所有情况。或者更确切地说,在StringUtils的情况下,这些方法应该是java.lang.String上的方法,但是因为它们不在那里,所以最好在其他地方使用静态方法。依赖注入对我来说是一个全新的想法,它太高级了,无法解决我的问题。^ ^。谢谢我的建议独立于DI,我把它作为另一个原因,当您不确定时,您应该避免使用实用程序类。如果没有DI,您可以简单地编写Utils.INSTANCE.makeFoo而不是Utils.makeFoo,它为您提供了与普通实用程序类相同的功能,只是更具灵活性。对不起,您的意思是没有DI,我可以使用更简单的Utils.INSTANCE.makeFoo?我认为Utils.makeFoo更简单。谢谢!我并没有说它更简单,我说它更灵活:更容易测试,如果需要不同的实现,更容易重构。依赖注入对我来说是一个全新的想法,而且它太先进了,无法解决我的问题。^ ^。谢谢我的建议独立于DI,我把它作为另一个原因,当您不确定时,您应该避免使用实用程序类。如果没有DI,您可以简单地编写Utils.INSTANCE.makeFoo而不是Utils.makeFoo,它为您提供了与普通实用程序类相同的功能,只是更具灵活性。对不起,您的意思是没有DI,我可以使用更简单的Utils.INSTANCE.makeFoo?我认为Utils.makeFoo更简单。谢谢!我没有说它更简单,我说它更灵活:更容易测试,如果需要不同的实现,更容易重构等等。