使用未知变量类型对抽象类进行子类化



我正在创建一个可重用的属性类,我希望它基于一个抽象类,我将用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> {
...
}
  1. 您应该在子类中使用构造函数,而不是像StrinProperty中那样使用setter。

  2. 我不明白你为什么需要类型变量。因此,使用您的请求值变量。因为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);
    }
    }
    

最新更新