返回 main class 而不是 subclass JAVA android 的问题
Problem of Returning the main class instead of the subclass JAVA android
我有一个函数,我希望它 return 继承自同一个 class 的子class之一。
主 class 是按钮,继承 class 是按钮 1、按钮 2 ...
我不明白什么时候我的功能return是什么东西总是突出大师class的特点。
我的最终目标是在角色用户的函数中传递按钮的变量 class。
在下面的示例中,只有名称。
这是我声明 class Button1
、Button2
和主要 class button
.
的方式
...
public static Button1 Button1;
public static Button2 Button2;
SettingsAdapter() {
Button1 = new Button1();
Button2 = new Button2();
}
public static class Button {
final public static String name = "test";
...
}
/*** line 1 ***/
public static class Button1 extends Button {
final public static String name = "name 1";
...
}
public static class Button2 extends Button {
final public static String name = "name 2";
...
}
这是函数
public static SettingsAdapter.Button getButtonPos(int a) {
if (a == 1) {
return Button1;
} else {
return Button2;
}
如果我们printf(getButtonPos(1).name)
输出总是test
。
我想要的输出是name 1
如何使这个功能真正成为 return Button1 或 Button2 的 class?
我的猜测是静态关键字是问题所在。尝试删除它。
此 class 的所有实例的静态变量都相同,因此来自按钮的 sublclass 的每个实例都有一个名为 name 且值为 "test"
的变量。
然后 button_1 有另一个名为 name 的变量,其值为 "name 1"
。我觉得java只拿第一个。
还有class名字是CamelCase,请重构。静态变量实际上可以通过 ClassName.VariableName
访问
如果没有静态就不行,那就使用方法。
在Button中做一个方法:
public String getName(){
return "test"
}
并在 subclasses:
中覆盖此方法
@Override
public String getName(){
return "name 1"
}
在打印 getName() 的值时。
printf(getButtonPos(1).getName())
另一种方法是直接检索class
button1.getClass()
或
button1.getClass().getName()
当需要字符串时。
我有一个函数,我希望它 return 继承自同一个 class 的子class之一。 主 class 是按钮,继承 class 是按钮 1、按钮 2 ... 我不明白什么时候我的功能return是什么东西总是突出大师class的特点。
我的最终目标是在角色用户的函数中传递按钮的变量 class。 在下面的示例中,只有名称。
这是我声明 class Button1
、Button2
和主要 class button
.
...
public static Button1 Button1;
public static Button2 Button2;
SettingsAdapter() {
Button1 = new Button1();
Button2 = new Button2();
}
public static class Button {
final public static String name = "test";
...
}
/*** line 1 ***/
public static class Button1 extends Button {
final public static String name = "name 1";
...
}
public static class Button2 extends Button {
final public static String name = "name 2";
...
}
这是函数
public static SettingsAdapter.Button getButtonPos(int a) {
if (a == 1) {
return Button1;
} else {
return Button2;
}
如果我们printf(getButtonPos(1).name)
输出总是test
。
我想要的输出是name 1
如何使这个功能真正成为 return Button1 或 Button2 的 class?
我的猜测是静态关键字是问题所在。尝试删除它。
此 class 的所有实例的静态变量都相同,因此来自按钮的 sublclass 的每个实例都有一个名为 name 且值为 "test"
的变量。
然后 button_1 有另一个名为 name 的变量,其值为 "name 1"
。我觉得java只拿第一个。
还有class名字是CamelCase,请重构。静态变量实际上可以通过 ClassName.VariableName
如果没有静态就不行,那就使用方法。 在Button中做一个方法:
public String getName(){
return "test"
}
并在 subclasses:
中覆盖此方法@Override
public String getName(){
return "name 1"
}
在打印 getName() 的值时。
printf(getButtonPos(1).getName())
另一种方法是直接检索class
button1.getClass()
或
button1.getClass().getName()
当需要字符串时。