Java中的继承和泛型

Posted

技术标签:

【中文标题】Java中的继承和泛型【英文标题】:Inheritance and Generics in Java 【发布时间】:2021-12-25 01:46:25 【问题描述】:

所以我正在做一个项目,我有一些关于继承的问题。 我有两个类,名为 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;
    

【问题讨论】:

【参考方案1】:

这就是你要找的东西:

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&lt;T&gt; 是一个泛型类。返回类型在每个具体类上声明。

【讨论】:

我明白了,但我得到一个错误,说我需要在属性中添加一个返回语句 @Pau Attribute 应该是一个抽象类。 Attribute 的值是什么类型? 对不起,我没有看到它是抽象的。我还有其他方法可以做到吗?因为我需要实例化 Attribute 类。程序是这样的:我从一个 csv 文件中读取多个字符串,并且我有一个包含每个单词类型的并行 csv 文件。然后,我要做的是实例化一个 Attribute 类(可以是 string,int,double,...),然后我根据类型链接它 我在原段落中添加了代码(抱歉是西班牙语),由于现在类是抽象的,我无法实例化属性类,我真的不知道如何更改现在 哦,没关系,它对我所做的改变有效。非常感谢!

以上是关于Java中的继承和泛型的主要内容,如果未能解决你的问题,请参考以下文章

Protobuf 继承和泛型

Visual Studio 2008 表单继承和泛型加载失败

JavaSE习题 继承接口和泛型

CDI:由于多重继承和泛型抽象导致的属性注入问题

java里的泛型和通配符

c++ 泛型 模板继承问题