Comme demandé dans le titre, puis-je faire une classe publique «commune» et certains public static foo()
dedans? Merci!Comment créer un module public pouvant exécuter certaines fonctions courantes dans java?
Répondre
Oui, vous pouvez.
Où voyez-vous exactement les difficultés?
Vous pouvez voir les classes d'utilité populaires (telles que StringUtils) dans Jakarta Commons Lang pour un exemple. Les chances sont que certaines des fonctions très courantes que vous envisagez sont déjà présentes dans l'une des familles de bibliothèques Commons.
court et facile: oui.
(mais pourquoi avez-vous pas tout simplement essayé?)
Merci! J'ai essayé et ça marche. Cependant, je veux juste trouver d'autres possibilités pour le remplir. Les réponses suivantes m'ont donné quelques indices. – herbertD
Une façon courante est de déclarer une classe utilitaire comme celui-ci
package my.package;
public class Utility {
private Utility() {
}
public static void foo() {
}
}
Si cette classe est sur votre chemin de classe, vous pouvez toujours faire de partout
my.package.Utility.foo();
Merci! C'est exactement ce que j'ai fait. – herbertD
oui ... Vous pouvez le faire ..
Si vous avez le moindre doute que vos besoins peuvent changer, que vous pourriez avoir besoin les différentes versions de certaines méthodes pour tester etc., utilisez une interface et un class, eg:
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); }
}
Cela facilite le passage à d'autres implémentations. Et vous aurez moins de problèmes lorsque vous décidez de commencer à utiliser un cadre DI comme Guice:
public class Client {
private final Utils util;
@Inject
Client(Utils utils) { //<--- Here Guice will inject for you what you specified
this.utils = utils;
}
}
L'injection de dépendance est toute nouvelle idée pour moi, et elle a aussi avancé pour résoudre mon problème.^_ ^. Merci! – herbertD
Ma suggestion est indépendante de DI, je l'ai inclus comme une autre raison pour laquelle vous devriez éviter les classes d'utilité lorsque vous n'êtes pas sûr. Sans DI, vous pouvez simplement écrire 'Utils.INSTANCE.makeFoo()' au lieu de 'Utils.makeFoo()', et il vous donne la même fonctionnalité qu'une classe d'utilitaires normale, avec plus de flexibilité. – Landei
Excusez-moi, vous voulez dire "sans DI, je peux utiliser Utils.INSTANCE.makeFoo() qui est plus simple? Je pense que Utils.makeFoo() est plus simple.Merci beaucoup! – herbertD
Comme dans la programmation OO, Object est la première chose que nous devons manipuler, donc ce qui m'intéresse c'est: est-ce 'ok' d'utiliser une fonction publique statique() 'sans instancier un vrai objet? Merci beaucoup! – herbertD
Oui, c'est bon. OO n'est pas approprié pour tout. Ou plutôt, dans le cas de StringUtils, ces méthodes devraient probablement avoir été des méthodes sur java.lang.String, mais puisqu'elles ne sont pas là, le mieux que vous puissiez faire est une méthode statique ailleurs. – Thilo
Vous m'avez montré quelque chose de nouveau, merci. – herbertD