【发布时间】:2013-06-01 09:04:11
【问题描述】:
我喜欢在 java 中创建数据库表的类表示。 列被设计为通用类,以便它可以处理表列可能具有的所有不同数据类型。
public class TableColumn<T> {
...
}
一个表有 0 ... n 个 TableColumns,所以我的表类看起来像这样:
public class Table {
protected ArrayList<TableColumn<T>> columns =
new ArrayList<TableColumn<T>>();
...
}
想法是通过以下方式添加列。
Table t = new Table();
t.addColumn(String.class);
t.addColumn(Integer.class);
t.addColumn(Date.class);
t.addColumn(String.class);
然后我可以通过以下方式操作数据:
String a = t.Cols(2).Row(3);
t.Col(2).Row(3) = "b";
但是我目前的实现方式正在失去类型安全性......我的问题是如何实现列,因为列可能会获得不同的数据类型。
有人有线索吗?
【问题讨论】:
-
所以您希望
col(2)与col(3)属于不同类型?那是不可能的。仅仅因为类型检查发生在编译时,参数 values 对这些没有影响。 -
还有其他可行的方法吗?另一个概念另一个结构?
-
你可以通过一个
<T> T get()方法来伪造这个,该方法只是转换为T。这将允许String x = foo.get()和Integer x = foo.get()编译。但这也是缺点:您丢失了所有编译时类型检查。当您使用错误时,它只会在运行时崩溃并烧毁。 -
太糟糕了,我绝对想保持类型安全。
标签: java generics parameterized-types