我在静态类“a”中有一个方法“b(Class g)”
所以 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
}
答案 0 :(得分:2)
您的方法b
需要Class
类型的参数,这就是它抱怨的原因。
<强>更新强>
您还有一个奇怪的类声明public static class a
根据Java specification on Class declaration
并非所有修饰符都适用于所有类声明...... The access modifier static pertains only to member classes
,这意味着您的公共类声明中有错误的static修饰符。< / p>
首先将顶级类声明更改为public class a
,然后查看其行为。
答案 1 :(得分:2)
有两点需要注意:
1)即使内部类'a'被声明为静态,方法b(Class g)
也不是静态的。因此,为了访问类'a'的b(Class g)方法,你仍然需要创建一个'a'的实例,即
a a1 = new a();
a1.b(SomeClass.class);
重要说明:声明类static不会使该类的方法成为静态。
2)调用方法b(Class g)
时,需要传递Class参数。不带参数调用b();
将导致错误。
如果要在不创建类“a”的实例的情况下调用b(Class g)
,请将方法b(Class g)
标记为静态。即
public static class a{
static public void b(Class g){
....
}
}
为了更好地理解静态嵌套类,请阅读this