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<T>
是一个泛型类。返回类型在每个具体类上声明。
【讨论】:
我明白了,但我得到一个错误,说我需要在属性中添加一个返回语句Attribute
应该是一个抽象类。 Attribute
的值是什么类型?
对不起,我没有看到它是抽象的。我还有其他方法可以做到吗?因为我需要实例化 Attribute 类。程序是这样的:我从一个 csv 文件中读取多个字符串,并且我有一个包含每个单词类型的并行 csv 文件。然后,我要做的是实例化一个 Attribute 类(可以是 string,int,double,...),然后我根据类型链接它
我在原段落中添加了代码(抱歉是西班牙语),由于现在类是抽象的,我无法实例化属性类,我真的不知道如何更改现在
哦,没关系,它对我所做的改变有效。非常感谢!以上是关于Java中的继承和泛型的主要内容,如果未能解决你的问题,请参考以下文章