我正在创建一个可重用的属性类,我希望它基于一个抽象类,我将用Java中的不同变量类型对其进行子类化。
public abstract class Property{
protected String name;
protected <type> type;
/*这就是问题所在,抽象类不知道对象类型是什么——所以,如果我派生了一个类型为String的StringProperty类,我该如何实现我的setter和getter?在父类中?*/
public void setName(String n){
name= n;
}
public String getName(){
return name;
}
}//末级
public class StringProperty extends Property{
super.setName("email");
super.setType("String");
}//end class
我想将抽象父类泛型化,以便将其派生为StringProperty、IntProperty、BoolProperty等,并在编译时设置派生类型,但我无法解决。
我希望每个属性实例都有三个属性:名称、类型和值
是否由子类继承?getter方法需要事先知道的类型
你指的是泛型类型?
public abstract class Property<T> {
protected String name;
protected T type;
public T getType() {
return type;
}
public void setType(T type) {
this.type = type;
}
}
public class StringProperty extends Property<String> {
...
}
-
您应该在子类中使用构造函数,而不是像StrinProperty中那样使用setter。
-
我不明白你为什么需要类型变量。因此,使用您的请求值变量。因为StringProperty处理字符串并具有String值,这一点有点明显。
public abstract class Property<T> { private String name; private T value; protected Property(String name, T value) { this.name = name; this.value = value; } public String getName() { return name; } public void setName(String name) { this.name = name; } public T getValue() { return value; } public void setValue(T value) { this.value = value; } } public class StringProperty extends Property<String> { public StringProperty(String name, String value) { super(name, value); } }