Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.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_Function_Public - Fatal编程技术网

如何制作一个可以在java中执行一些常见功能的公共模块?

如何制作一个可以在java中执行一些常见功能的公共模块?,java,function,public,Java,Function,Public,正如标题中所问,我可以创建一个“公共”公共类并在其中创建一些公共静态foo吗?谢谢 简单明了:是的 但是你为什么不试试呢?简单明了:是的 但是为什么不干脆试试呢?一种常见的方法是像这样声明一个实用程序类 package my.package; public class Utility { private Utility() { } public static void foo() { } } 如果这个类在你的类路径上,你总是可以在任何地方做 my.package.Uti

正如标题中所问,我可以创建一个“公共”公共类并在其中创建一些公共静态foo吗?谢谢

简单明了:是的

但是你为什么不试试呢?

简单明了:是的


但是为什么不干脆试试呢?

一种常见的方法是像这样声明一个实用程序类

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更简单。谢谢!我没有说它更简单,我说它更灵活:更容易测试,如果需要不同的实现,更容易重构等等。