Generics 泛型和并行类层次结构

Generics 泛型和并行类层次结构,generics,Generics,我在将泛型与并行类层次结构结合使用时遇到了一些问题。我已经多次把自己编入这种混乱之中 假设我有以下类层次结构: TableColumn->子类SqlTableColumn、OracleTableColumn 表->子类SqlTable、OracleTable 数据库->子类SqlDatabase、OracleDatabase 我在基类型上使用泛型,它提供: Table<TableColumn> Database<Table<TableColumn>> Sql

我在将泛型与并行类层次结构结合使用时遇到了一些问题。我已经多次把自己编入这种混乱之中

假设我有以下类层次结构: TableColumn->子类SqlTableColumn、OracleTableColumn 表->子类SqlTable、OracleTable 数据库->子类SqlDatabase、OracleDatabase

我在基类型上使用泛型,它提供:

Table<TableColumn>
Database<Table<TableColumn>>

SqlTable<SqlTableColumn>
SqlDatabase<SqlTable<SqlTableColumn>>

OracleTable<OracleTableColumn>
OracleDatabase<OracleTable<OracleTableColumn>>
表格
数据库
SqlTable
SQL数据库
预言家
OracleDatabase
我觉得这不是泛型的好用法。什么是更好的设计?

泛型(如Java或C中的泛型)实际上是为了支持参数化类型。在这种情况下,您要传递的类型(TableColumn、SqlTableColumn)实际上并不打算成为类型参数

我将把这组类型实现为并行对象层次结构,而不是参数化类型。例如:

OracleTable extends Table
SqlTable extends Table

OracleDatabase extends Database
SqlDatabase extends Database

OracleTableColumn extends TableColumn
SqlTableColumn extends TableColumn

所有这些类型上的公共方法都应该只引用基类,就像JDBC中所做的那样。

忽略泛型背后关于何时使用它们的任何理论内容,这对我来说似乎更自然(在C中):

类数据库
其中T:表
其中C:TableColumn{}
类表
其中C:TableColumn{}
类TableColumn{}
//sql
类SqlDatabase:数据库{}
类SqlTable:表{}
类SqlColumn:TableColumn{}
//神谕
类OracleDatabase:数据库{}
类OracleTable:表{}
类OracleColumn:TableColumn{}
哪种编程语言(我想是Java还是C#)?
class Database<T, C>
    where T : Table<C>
    where C : TableColumn { }
class Table<C>
    where C : TableColumn { }
class TableColumn { }

//sql
class SqlDatabase : Database<SqlTable, SqlColumn> { }
class SqlTable : Table<SqlColumn> { }
class SqlColumn : TableColumn { }

//oracle
class OracleDatabase : Database<OracleTable, OracleColumn> { }
class OracleTable : Table<OracleColumn> { }
class OracleColumn : TableColumn { }