首页 > 解决方案 > Java中的继承和泛型

问题描述

所以我正在做一个项目,我有一些关于继承的问题。我有两个类,名为 Attribute 和 NumericalAttribute。第一个:

public class Attribute {
    Attribute() {}
    Attribute(String type) {}
}

(这应该是抽象的,但我需要实例化它所以它不能)

另一个:

public class NumericalAttribute extends Attribute {
    double value;

    NumericalAttribute(String value) { this.value = Double.parseDouble(value); }

    public double getAtr(Attribute atr) { return this.value; }
}

我有多个 Attribute 子级,每个子级都具有相同的结构,但代表另一种类型(字符串、整数、布尔值)。问题是我需要某种方法来返回“值”变量(我在 NumericalAttribute 中确实有)但是对于属性类。但是我不能在 Attribute 中创建方法,因为每个儿子都会有不同类型的返回。那么有什么办法可以让我通过Attribute获取“value”变量呢?非常感谢!

  public static Atributo transformAtributo(String tipo, String valor) {
        Atributo atr = new Atributo();
        if (tipo.equals("bool")) atr = new AtributoBoolean(valor);
        else if (tipo.equals("string")) atr = new AtributoCategorico(valor);
        else if (tipo.equals("num")) atr = new AtributoNumerico(valor);
        else if (tipo.equals("set")) atr = new AtributoCategoricoMultiple(valor);
        else if (tipo.equals("fecha")) atr = null;

        return atr;
    }

标签: javagenericsinheritance

解决方案


这就是您要查找的内容:

public abstract class Attribute<T> {

    public abstract T getValue(Attribute attr);

}

public class NumericalAttribute extends Attribute<Double> {

    double value;

    @Override
    public Double getValue(Attribute attr) {
        return value;
    }
}

public class TextAttribute extends Attribute<String> {

    String value;

    @Override
    public String getValue(Attribute attr) {
        return value;
    }
}

Attribute<T>是一个泛型类。返回类型在每个具体类上声明。


推荐阅读