Как вызвать метод из статического класса в другом классе? - PullRequest
0 голосов
/ 22 марта 2011

У меня есть метод "b (Class g)" в статическом классе "a"

, поэтому myclass.java содержит ...

public static class a{

     public void b(Class g){
     ....
     }

}

, чем другой метод в том жеmyclass.java

public void c(){

if(...){}
else{
   b();  //i want to call b but i get an error asking me to create the method

}

Ответы [ 2 ]

2 голосов
/ 22 марта 2011

Следует отметить две вещи: 1) Даже если внутренний класс «a» объявлен как статический, метод b(Class g) не является статическим. Таким образом, чтобы получить доступ к методу b (Class g) класса 'a', вам все равно необходимо создать экземпляр 'a', т.е.

a a1 = new a();
a1.b(SomeClass.class);

Важно. Объявление статического класса не делает методы этого класса статичными.

2) При вызове метода b(Class g) необходимо передать аргумент Class. Вызов b(); без аргумента приведет к ошибке.

Если вы хотите вызвать b(Class g) без создания экземпляра класса 'a', пометьте метод b(Class g) как статический. т.е.

public static class a{

     static public void b(Class g){
     ....
     }

}

Чтобы лучше понять статический вложенный класс, прочитайте this

2 голосов
/ 22 марта 2011

Вашему методу b нужен аргумент типа Class, поэтому он жалуется.

Обновление

У вас также есть странное объявление класса public static class a

Согласно Спецификация Java для объявления класса Не всемодификаторы применимы ко всем видам объявлений классов ...... The access modifier static pertains only to member classes, что означает, что у вас неправильный статический модификатор в вашем объявлении открытого класса.

Изменениесначала вы объявляете объявление класса верхнего уровня public class a, а затем смотрите, как оно себя ведет.

...