2010-10-19 1 views
1

Je sais que c'est une question de débutant. Je suis nouveau à Java et aussi à la programmation en général.Classe qui n'a que des données statiques et des méthodes pour accéder à ces données. Comment mettre en œuvre correctement?

dire que je suis une classe qui ne dispose que des données statiques, par exemple:

class Foo { 
private static int x; } 

Je veux utiliser la classe sans instancier un objet. Donc, je veux être en mesure de le faire:

Foo.setX(5); 
Foo.getX(); 

Quelle est la meilleure façon de mettre en œuvre cette classe, je suis un peu confus au sujet des interfaces et d'autres choses pour l'instant.

Merci.

Répondre

3

Pourquoi ne pas simplement définir deux méthodes statiques qui modifient/retournent le champ statique?

Static Methods in Java

+0

Parce que je l'ai déjà dit: "Je veux utiliser la classe sans instancier aucun objet" – m4design

+0

Lorsque vous définissez une méthode statique, vous n'avez pas besoin d'instancier la classe pour accéder à la méthode. Vous venez d'écrire Foo.GetX(). – testalino

+1

@ m4design: J'ai édité ma réponse. Veuillez lire cet article pour avoir un aperçu. – testalino

3

Je pense que Singleton est ce que vous cherchez:

La classe singleton:

public class Singleton { 

    private static final Singleton INSTANCE = new Singleton(); 

    private int x; 

    // Private constructor prevents instantiation from other classes 
    private Singleton() { 
    } 

    public static Singleton getInstance() { 
     return INSTANCE; 
    } 

    public int getX() { 
     return x; 
    } 

    public void setX(int x) { 
     this.x = x; 
    } 

} 

et accéder à partir de n'importe où dans votre code:

int x = Singleton.getInstance().getX(); 
Singleton.getInstance().setX(10); 
+2

[ "Chaque fois que vous faites un singleton, Dieu tue une start-up, deux si vous _think_ vous avez fait thread-safe."] (Http://www.dadhacker.com/ blog /? p = 1274) – sbi

+0

@sbi 100% d'accord, singletons sont mal! –

+0

Si c'est mal, y a-t-il un meilleur design? Ou devrais-je changer ma conception de la résolution de mon problème? – m4design

0

Vous pouvez toujours avoir des méthodes publiques statiques et ECRIRE à faire ce que vous voulez. Mais jetez un oeil à nouveau, Singleton Pattern peut être ce que vous voulez.

2

Vous pouvez simplement définir getX et setX méthodes comme statiques:

class Foo 
{ 
    private static int x; 

    public static int getX() 
    { 
     return x; 
    } 

    public static void setX(int x) 
    { 
     Foo.x = x; 
    } 
} 

Ensuite, vous pouvez utiliser sans instancier un objet:

Foo.setX(5); 
int val = Foo.getX(); 

Comme d'autres l'ont suggéré, un Singleton est une approche plus propre , bien qu'il ne réponde pas à votre exigence de ne pas instancier un objet.

http://en.wikipedia.org/wiki/Singleton_pattern

+0

Je pense que ceci peut fonctionner en C++ mais pas en Java (si quelqu'un peut se conformer). J'ai essayé ceci en Java et il me dit que (non-statique ne peut pas être référencé à partir d'un contexte statique). même pensé x est en fait statique !! – m4design

+0

Cela fonctionne en Java, essayez! tu verras ! ... btw je recommande singleton contre, réfléchir à deux fois avant impl., et êtes-vous sûr que vous avez besoin d'électricité statique du tout? –

+1

Il y a une erreur. this.x = x; ne fonctionnera pas. Cela doit être Foo.x = x; – tkr

Questions connexes