2010-10-18 23 views

Répondre

2

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.

+0

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

+1

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

+0

Vous m'avez montré quelque chose de nouveau, merci. – herbertD

3

court et facile: oui.

(mais pourquoi avez-vous pas tout simplement essayé?)

+0

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

2

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(); 
+0

Merci! C'est exactement ce que j'ai fait. – herbertD

3

oui ... Vous pouvez le faire ..

0

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; 
    } 
} 
+0

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

+0

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

+0

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