Eclipse有一个名为的自动Java清理:
更改对静态成员的间接访问以直接访问(通过子类型访问)"`
这是什么意思?
编辑:请注意,还有另一个
使用声明类型
更改对静态成员的非静态访问
所以我的询问主题必须与此不同。
这些在Windows > Preferences > Java > CodeStyle > Clean-Up
中,几乎无法找到,因为它位于Windows
下。
答案 0 :(得分:1)
这解决了在一个类中有静态方法的情况,但是你使用子类的名称来调用它。因此,静态方法可能是
SuperClass.someStaticMethod();
但您已将其引用为
SubClass.someStaticMethod();
请注意,它与另一个清理类似,您可以在其中调用静态方法,例如myObject.someStaticMethod();
来代替TheClass.someStaticMethod();
。括号中的部分表示它是“通过子类型访问”清理。
答案 1 :(得分:1)
假设您有班级
class A {
static int i;
}
然后
更改对静态成员的间接访问以直接访问(通过子类型访问)
指的是你有另一个类
的情况class B extends A {}
并写
B.i = 2;
在这种情况下,清理会将其更改为
A.i = 2;
因为(正如我在评论中写的那样),静态成员将通过其声明的类(A
)进行访问,而不是通过继承它的类(B
)。
使用声明类型
更改对静态成员的非静态访问
指的是你写
的情况A a = new A();
a.i = 2;
在这种情况下,清理会将其更改为
A.i = 2;
因为静态成员将通过类(A
)而不是通过类的实例(a
)来访问。
答案 2 :(得分:0)
您通过对象而不是定义它的类调用静态变量/方法。当它表示'通过声明类型'时,它意味着你将变量/方法声明为类变量/方法,你应该用它来调用它。