【发布时间】:2018-12-22 15:27:16
【问题描述】:
我正在尝试为变量表示创建一个类,所以我首先创建了一个参数化基类:
public abstract class DataField<Type>
{
public enum DataTypes
{
STRING,
INT,
FLOAT,
TIME,
DATE
}
private DataTypes type=null;
private String name=null;
private Type value=null;
private DataField()
{
}
public DataField(String name)
{
setName(name);
}
DataField(String name, DataTypes type)
{
this(name);
setType(type);
}
DataField(String name, DataTypes type, Type value)
{
this(name, type);
setValue(value);
}
public DataField(String name, Type value)
{
this(name);
setValue(value);
}
public DataField(String name, String value)
{
this(name);
setStringValue(value);
}
public abstract void setStringValue(String strValue);
...
}
然后为不同类型制作子类,定义方法:
public class DataFieldInt extends DataField<Long>
...
public class DataFieldBoolean extends DataField<Boolean>
...
等等。但我对字符串有一个预期的问题:
通用超类有 2 个构造函数
DataField(String name, Type value) 设置变量的名称和值,以及
DataField(String name, String value) 从 String 中设置变量的名称和值,将其转换为所需的类型。但是对于子类,我有一个问题 - 使用什么构造函数,因为它们都是(字符串,字符串)。所以,这段代码
public class DataFieldString extends DataField<String>
{
public DataFieldString(String name, String value)
{
super(name, value);
...
}
给出关于模糊引用的错误 如何解决?我看到的唯一方法是使用 StringBuilder 或 StringBuffer 之类的东西来代替 String,但有趣的是,有没有“原生”解决方案?
谢谢
【问题讨论】:
-
你可以使用静态工厂方法代替构造函数
-
当然,工厂模式等等。但有趣的是如何在这里使用构造函数。我一直想知道 java oop 尤其是在多年的 c++ 经验之后,但在这种情况下,我不知道如何解决这个问题
-
好吧,又看了一遍,没看懂——这种情况下如何使用工厂模式?你的意思是根本不使用构造函数?
标签: java generics inheritance constructor