2010-02-16 6 views
1
import static com.example.hello.Tools.*; 
public class MAINCLASS{ 
    public void run(){ 
     runtools(); // this works 
    } 
    private class People{ 
     public void runpeople(){ 
      runtools(); // this does not work. 
     } 
    } 
} 

Outils à l'intérieur ...Pourquoi ne puis-je pas appeler cette fonction en Java?

Edit: Quand je roule sur runtools() dans People.runpeople() ... Je reçois ceci:

La méthode runtools() est définie pour la type sur la MAINCLASS.People

public class Tools { 
    public void runtools() { 
    .... 
    } 
} 

Est-ce que quelqu'un sait pourquoi?

+2

Pouvez-vous expliquer comment cela ne fonctionne pas? Erreur de compilation, exception d'exécution, etc.? –

+0

Cela fonctionne-t-il si vous supprimez le bit "static" de l'instruction d'importation? – glasnt

+0

Plus comment ça marche _does_ ça marche? Il ne compile pas comme écrit. –

Répondre

7

Vous devez déclarer Tools#runtools()static pour pouvoir le import static.

public class Tools { 
    public static void runtools() { 
     // ... 
    } 
} 

Soit ça, ou instancier Tools puis appelez runtools() sur elle.

new Tools().runtools(); 
1

En référence à une autre question que vous avez posées récemment, liées avec cette même classe et il est des questions: Why can't I put my functions in another class?

Est-ce que prendre la suggestion d'enlever le « de Cletus statique » de la solution d'appel à l'importation de cette question aussi bien? Le bit "statique" est toujours là.

1

L'appel à runtools() ne devraient pas travailler dans l'un de ces deux cas, étant donné que runtools n'est pas une méthode statique - il a besoin d'une instance de l'objet Tools à invoquer sur.

1

Ce code ne devrait pas fonctionner (du tout) comme vous l'avez posté car vous importez uniquement des membres statiques de Tools, et runtools() est une méthode d'instance. Si vous deviez rendre runtools() statique, les deux invocations de runtools() devraient fonctionner car elles sont dans les deux cas.

1

Ceci ne compile pas. Vous ne pouvez pas importer un package avec le mot-clé static. L'importation doit être une méthode spécifique.

Vous avez donc besoin d'écrire quelque chose comme ça pour le faire compiler, et le travail:

import static com.example.hello.Tools.someMethod; 

En outre, la méthode que vous importez a besoin d'être statique.

Cela vous fait appeler une méthode statique comme il a été déclaré dans le cadre de cette catégorie:

someMethod(); 
Questions connexes