Как сделать публичный модуль, который может выполнять некоторые общие функции в Java? - PullRequest
1 голос
/ 18 октября 2010

Как указано в заголовке, могу ли я сделать «общий» публичный класс и немного public static foo() в нем?Спасибо!

Ответы [ 5 ]

3 голосов
/ 18 октября 2010

да ... Вы можете сделать это ..

3 голосов
/ 18 октября 2010

Обычный способ - объявить служебный класс следующим образом

package my.package;

public class Utility {

  private Utility() {
  }

  public static void foo() {
  }

}

Если этот класс находится на вашем пути к классам, вы всегда можете сделать это из любого места

my.package.Utility.foo();
3 голосов
/ 18 октября 2010

коротко и просто: да.

(но почему вы просто не попробовали это?)

2 голосов
/ 18 октября 2010

Да, вы можете.

Где именно вы видите трудности?

Вы можете увидеть популярные служебные классы (такие как StringUtils ) в Jakarta Commons Lang дляпример.Скорее всего, некоторые из наиболее распространенных функций, о которых вы думаете, уже присутствуют в одной из библиотек семейства Commons.

0 голосов
/ 18 октября 2010

Если у вас есть малейшие сомнения в том, что ваши требования могут измениться, что вам могут потребоваться разные версии некоторых методов для тестирования и т. Д., Используйте интерфейс и класс, например:

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); } 
}

Это позволяет легко переключаться на другие реализации. И у вас будет меньше проблем, когда вы решите начать использовать DI-фреймворк, такой как Guice:

public class Client {
  private final Utils util;

  @Inject
  Client(Utils utils) {  //<--- Here Guice will inject for you what you specified
    this.utils = utils; 
  }  
}
...