[#1374] Review usage of generics. Is <? extends T> really justified?

This commit is contained in:
Lukas Eder 2012-10-27 23:28:57 +02:00
parent c7b295528a
commit 12b913a2d9
29 changed files with 60 additions and 60 deletions

View File

@ -9072,6 +9072,7 @@ SERVER = new RemoteDebuggerServer(DEBUGGER_PORT);</java>
<h3>Quantified comparison predicates (no deprecation yet)</h3>
<h3>Master data types have been removed</h3>
<h3>GroupField</h3>
<h3>? extends T has been relaxed, e.g. for casting, Field.getType(), etc.</h3>
<h3>Object renames</h3>
<ul>

View File

@ -72,7 +72,7 @@ public interface DataType<T> extends Serializable {
/**
* Retrieve the Java type associated with this data type
*/
Class<? extends T> getType();
Class<T> getType();
/**
* Retrieve a Java type associated with this data type and precision/scale
@ -82,7 +82,7 @@ public interface DataType<T> extends Serializable {
/**
* Retrieve the Java type associated with ARRAYs of this data type
*/
Class<? extends T[]> getArrayType();
Class<T[]> getArrayType();
/**
* Retrieve the data type for an ARRAY of this data type

View File

@ -92,7 +92,7 @@ public interface Field<T> extends GroupField {
/**
* The Java type of the field.
*/
Class<? extends T> getType();
Class<T> getType();
/**
* The type of this field (might not be dialect-specific)
@ -170,7 +170,7 @@ public interface Field<T> extends GroupField {
* @see #cast(DataType)
*/
@Support
<Z> Field<Z> cast(Class<? extends Z> type);
<Z> Field<Z> cast(Class<Z> type);
// ------------------------------------------------------------------------
// Conversion of field into a sort field

View File

@ -54,7 +54,7 @@ public interface Parameter<T> extends QueryPart {
/**
* The Java type of the parameter.
*/
Class<? extends T> getType();
Class<T> getType();
/**
* The type of this parameter (might not be dialect-specific)

View File

@ -57,7 +57,7 @@ public interface UDT<R extends UDTRecord<R>> extends FieldProvider, QueryPart {
/**
* @return The record type produced by this table
*/
Class<? extends R> getRecordType();
Class<R> getRecordType();
/**
* The UDT's data type as known to the database

View File

@ -89,11 +89,11 @@ public abstract class AbstractDataType<T> implements DataType<T> {
private final SQLDialect dialect;
private final SQLDataType<T> sqlDataType;
private final Class<? extends T> type;
private final Class<T> type;
private final String castTypeName;
private final String typeName;
private final Class<? extends T[]> arrayType;
private final Class<T[]> arrayType;
private final boolean hasPrecisionAndScale;
@ -111,19 +111,19 @@ public abstract class AbstractDataType<T> implements DataType<T> {
sqlDataTypesByType = new LinkedHashMap<Class<?>, DataType<?>>();
}
protected AbstractDataType(SQLDialect dialect, SQLDataType<T> sqldatatype, Class<? extends T> type, String typeName) {
protected AbstractDataType(SQLDialect dialect, SQLDataType<T> sqldatatype, Class<T> type, String typeName) {
this(dialect, sqldatatype, type, typeName, typeName, false);
}
protected AbstractDataType(SQLDialect dialect, SQLDataType<T> sqldatatype, Class<? extends T> type, String typeName, String castTypeName) {
protected AbstractDataType(SQLDialect dialect, SQLDataType<T> sqldatatype, Class<T> type, String typeName, String castTypeName) {
this(dialect, sqldatatype, type, typeName, castTypeName, false);
}
protected AbstractDataType(SQLDialect dialect, SQLDataType<T> sqldatatype, Class<? extends T> type, String typeName, boolean hasPrecisionAndScale) {
protected AbstractDataType(SQLDialect dialect, SQLDataType<T> sqldatatype, Class<T> type, String typeName, boolean hasPrecisionAndScale) {
this(dialect, sqldatatype, type, typeName, typeName, hasPrecisionAndScale);
}
protected AbstractDataType(SQLDialect dialect, SQLDataType<T> sqlDataType, Class<? extends T> type, String typeName, String castTypeName, boolean hasPrecisionAndScale) {
protected AbstractDataType(SQLDialect dialect, SQLDataType<T> sqlDataType, Class<T> type, String typeName, String castTypeName, boolean hasPrecisionAndScale) {
this.dialect = dialect;
// [#858] SQLDataTypes should reference themselves for more convenience
@ -132,7 +132,7 @@ public abstract class AbstractDataType<T> implements DataType<T> {
this.typeName = typeName;
this.castTypeName = castTypeName;
this.hasPrecisionAndScale = hasPrecisionAndScale;
this.arrayType = (Class<? extends T[]>) Array.newInstance(type, 0).getClass();
this.arrayType = (Class<T[]>) Array.newInstance(type, 0).getClass();
init();
}
@ -282,7 +282,7 @@ public abstract class AbstractDataType<T> implements DataType<T> {
}
@Override
public final Class<? extends T> getType() {
public final Class<T> getType() {
return type;
}
@ -297,7 +297,7 @@ public abstract class AbstractDataType<T> implements DataType<T> {
}
@Override
public final Class<? extends T[]> getArrayType() {
public final Class<T[]> getArrayType() {
return arrayType;
}
@ -426,7 +426,7 @@ public abstract class AbstractDataType<T> implements DataType<T> {
return result;
}
protected static <T> DataType<T> getDataType(SQLDialect dialect, Class<? extends T> type) {
protected static <T> DataType<T> getDataType(SQLDialect dialect, Class<T> type) {
// Recurse for arrays
if (byte[].class != type && type.isArray()) {

View File

@ -133,7 +133,7 @@ abstract class AbstractField<T> extends AbstractQueryPart implements Field<T> {
}
@Override
public final Class<? extends T> getType() {
public final Class<T> getType() {
return dataType.getType();
}
@ -160,7 +160,7 @@ abstract class AbstractField<T> extends AbstractQueryPart implements Field<T> {
}
@Override
public final <Z> Field<Z> cast(Class<? extends Z> type) {
public final <Z> Field<Z> cast(Class<Z> type) {
return cast(SQLDataType.getDataType(null, type));
}

View File

@ -50,7 +50,7 @@ class DefaultDataType<T> extends AbstractDataType<T> {
*/
private static final long serialVersionUID = -2612295936942892367L;
DefaultDataType(SQLDialect dialect, Class<? extends T> type, String typeName, String castTypeName) {
DefaultDataType(SQLDialect dialect, Class<T> type, String typeName, String castTypeName) {
super(dialect, null, type, typeName, castTypeName);
}
}

View File

@ -1196,7 +1196,7 @@ public class Factory {
* @return The cast field
*/
@Support
public static <T> Field<T> cast(Object value, Class<? extends T> type) {
public static <T> Field<T> cast(Object value, Class<T> type) {
return val(value, type).cast(type);
}
@ -1233,7 +1233,7 @@ public class Factory {
* @return The cast field
*/
@Support
public static <T> Field<T> castNull(Class<? extends T> type) {
public static <T> Field<T> castNull(Class<T> type) {
return NULL().cast(type);
}
@ -1246,7 +1246,7 @@ public class Factory {
* @return The cast fields
*/
@SuppressWarnings("unchecked")
static <T> Field<T>[] castAll(Class<? extends T> type, Field<?>... fields) {
static <T> Field<T>[] castAll(Class<T> type, Field<?>... fields) {
Field<?>[] castFields = new Field<?>[fields.length];
for (int i = 0; i < fields.length; i++) {
@ -4449,7 +4449,7 @@ public class Factory {
* @see #param(String, Object)
*/
@Support
public static <T> Param<T> param(String name, Class<? extends T> type) {
public static <T> Param<T> param(String name, Class<T> type) {
return param(name, SQLDataType.getDataType(null, type));
}
@ -4503,7 +4503,7 @@ public class Factory {
* @see #val(Object, Class)
*/
@Support
public static <T> Field<T> value(Object value, Class<? extends T> type) {
public static <T> Field<T> value(Object value, Class<T> type) {
return val(value, type);
}
@ -4611,7 +4611,7 @@ public class Factory {
* @see #val(Object, Class)
*/
@Support
public static <T> Param<T> inline(Object value, Class<? extends T> type) {
public static <T> Param<T> inline(Object value, Class<T> type) {
// [#1309] TODO, make this type-safe
Param<T> val = (Param<T>) val(value, type);
val.setInline(true);
@ -4714,7 +4714,7 @@ public class Factory {
* @see #val(Object, DataType)
*/
@Support
public static <T> Field<T> val(Object value, Class<? extends T> type) {
public static <T> Field<T> val(Object value, Class<T> type) {
return val(value, getDataType(type));
}
@ -5145,7 +5145,7 @@ public class Factory {
*/
@SuppressWarnings("deprecation")
@Support
public static <T> DataType<T> getDataType(Class<? extends T> type) {
public static <T> DataType<T> getDataType(Class<T> type) {
return FieldTypeHelper.getDataType(SQLDialect.SQL99, type);
}

View File

@ -118,7 +118,7 @@ public final class FieldTypeHelper {
@SuppressWarnings("unchecked")
public static <T> T getFromSQLInput(Configuration configuration, SQLInput stream, Field<T> field) throws SQLException {
Class<? extends T> type = field.getType();
Class<T> type = field.getType();
DataType<T> dataType = field.getDataType();
if (type == Blob.class) {
@ -229,12 +229,10 @@ public final class FieldTypeHelper {
}
public static <T> void writeToSQLOutput(SQLOutput stream, Field<T> field, T value) throws SQLException {
Class<? extends T> type = field.getType();
writeToSQLOutput(stream, type, field.getDataType(), value);
writeToSQLOutput(stream, field.getType(), field.getDataType(), value);
}
private static <T> void writeToSQLOutput(SQLOutput stream, Class<? extends T> type, DataType<T> dataType, T value) throws SQLException {
private static <T> void writeToSQLOutput(SQLOutput stream, Class<T> type, DataType<T> dataType, T value) throws SQLException {
if (value == null) {
stream.writeObject(null);
}
@ -376,7 +374,7 @@ public final class FieldTypeHelper {
}
@SuppressWarnings("unchecked")
private static <T> T getFromResultSet(ExecuteContext ctx, Class<? extends T> type, int index)
private static <T> T getFromResultSet(ExecuteContext ctx, Class<T> type, int index)
throws SQLException {
ResultSet rs = ctx.resultSet();
@ -390,7 +388,7 @@ public final class FieldTypeHelper {
else if (type == BigInteger.class) {
// The SQLite JDBC driver doesn't support BigDecimals
if (ctx.getDialect() == SQLDialect.SQLITE) {
return Convert.convert(rs.getString(index), (Class<? extends T>) BigInteger.class);
return Convert.convert(rs.getString(index), (Class<T>) BigInteger.class);
}
else {
BigDecimal result = rs.getBigDecimal(index);
@ -400,7 +398,7 @@ public final class FieldTypeHelper {
else if (type == BigDecimal.class) {
// The SQLite JDBC driver doesn't support BigDecimals
if (ctx.getDialect() == SQLDialect.SQLITE) {
return Convert.convert(rs.getString(index), (Class<? extends T>) BigDecimal.class);
return Convert.convert(rs.getString(index), (Class<T>) BigDecimal.class);
}
else {
return (T) rs.getBigDecimal(index);
@ -663,7 +661,7 @@ public final class FieldTypeHelper {
}
@SuppressWarnings("unchecked")
private static <T> T getEnumType(Class<? extends T> type, String literal) throws SQLException {
private static <T> T getEnumType(Class<T> type, String literal) throws SQLException {
try {
Object[] list = (Object[]) type.getMethod("values").invoke(type);
@ -683,7 +681,7 @@ public final class FieldTypeHelper {
}
@SuppressWarnings("unchecked")
public static <T> T getFromStatement(ExecuteContext ctx, Class<? extends T> type, int index) throws SQLException {
public static <T> T getFromStatement(ExecuteContext ctx, Class<T> type, int index) throws SQLException {
CallableStatement stmt = (CallableStatement) ctx.statement();
if (type == Blob.class) {
@ -882,7 +880,7 @@ public final class FieldTypeHelper {
}
}
public static <T> DataType<T> getDataType(SQLDialect dialect, Class<? extends T> type) {
public static <T> DataType<T> getDataType(SQLDialect dialect, Class<T> type) {
switch (dialect) {
case ASE:
return ASEDataType.getDataType(type);
@ -931,7 +929,7 @@ public final class FieldTypeHelper {
// -------------------------------------------------------------------------
@SuppressWarnings("unchecked")
private static <T> T pgFromString(Class<? extends T> type, String string) throws SQLException {
private static <T> T pgFromString(Class<T> type, String string) throws SQLException {
if (string == null) {
return null;
}
@ -1055,7 +1053,7 @@ public final class FieldTypeHelper {
* Workarounds for the unimplemented Postgres JDBC driver features
*/
@SuppressWarnings("unchecked")
private static <T> T pgGetArray(ExecuteContext ctx, Class<? extends T> type, int index)
private static <T> T pgGetArray(ExecuteContext ctx, Class<T> type, int index)
throws SQLException {
ResultSet rs = ctx.resultSet();

View File

@ -77,7 +77,7 @@ class ParameterImpl<T> extends AbstractQueryPart implements Parameter<T> {
}
@Override
public final Class<? extends T> getType() {
public final Class<T> getType() {
return type.getType();
}

View File

@ -327,11 +327,11 @@ public final class SQLDataType<T> extends AbstractDataType<T> {
} catch (Exception ignore) {}
}
private SQLDataType(Class<? extends T> type, String typeName) {
private SQLDataType(Class<T> type, String typeName) {
this(type, typeName, false);
}
private SQLDataType(Class<? extends T> type, String typeName, boolean hasPrecisionAndScale) {
private SQLDataType(Class<T> type, String typeName, boolean hasPrecisionAndScale) {
super(null, null, type, typeName, hasPrecisionAndScale);
}
}

View File

@ -87,7 +87,7 @@ public class UDTImpl<R extends UDTRecord<R>> extends AbstractFieldProviderQueryP
* parameter <R> for other types than {@link Record}
*/
@Override
public Class<? extends R> getRecordType() {
public Class<R> getRecordType() {
throw new UnsupportedOperationException();
}

View File

@ -549,7 +549,8 @@ final class Utils {
result.add((QueryPart) substitute);
}
else {
Class<?> type = substitute != null ? substitute.getClass() : Object.class;
@SuppressWarnings("unchecked")
Class<Object> type = (Class<Object>) (substitute != null ? substitute.getClass() : Object.class);
result.add(new Val<Object>(substitute, Factory.getDataType(type)));
}
}

View File

@ -122,7 +122,7 @@ public class ASEDataType<T> extends AbstractDataType<T> {
super(SQLDialect.ASE, sqlDataType, sqlDataType.getType(), typeName);
}
public static <T> DataType<T> getDataType(Class<? extends T> type) {
public static <T> DataType<T> getDataType(Class<T> type) {
return getDataType(SQLDialect.ASE, type);
}

View File

@ -141,7 +141,7 @@ public class CUBRIDDataType<T> extends AbstractDataType<T> {
super(SQLDialect.CUBRID, sqlDataType, sqlDataType.getType(), typeName, castTypeName);
}
public static <T> DataType<T> getDataType(Class<? extends T> type) {
public static <T> DataType<T> getDataType(Class<T> type) {
return getDataType(SQLDialect.CUBRID, type);
}

View File

@ -122,7 +122,7 @@ public class DB2DataType<T> extends AbstractDataType<T> {
super(SQLDialect.DB2, sqlDataType, sqlDataType.getType(), typeName, castTypeName);
}
public static <T> DataType<T> getDataType(Class<? extends T> type) {
public static <T> DataType<T> getDataType(Class<T> type) {
return getDataType(SQLDialect.DB2, type);
}

View File

@ -135,7 +135,7 @@ public class DerbyDataType<T> extends AbstractDataType<T> {
super(SQLDialect.DERBY, sqlDataType, sqlDataType.getType(), typeName, castName);
}
public static <T> DataType<T> getDataType(Class<? extends T> type) {
public static <T> DataType<T> getDataType(Class<T> type) {
return getDataType(SQLDialect.DERBY, type);
}

View File

@ -127,7 +127,7 @@ public class FirebirdDataType<T> extends AbstractDataType<T> {
super(SQLDialect.FIREBIRD, sqlDataType, sqlDataType.getType(), typeName, castTypeName);
}
public static <T> DataType<T> getDataType(Class<? extends T> type) {
public static <T> DataType<T> getDataType(Class<T> type) {
return getDataType(SQLDialect.FIREBIRD, type);
}

View File

@ -148,7 +148,7 @@ public class H2DataType<T> extends AbstractDataType<T> {
super(SQLDialect.H2, sqlDataType, sqlDataType.getType(), typeName);
}
public static <T> DataType<T> getDataType(Class<? extends T> type) {
public static <T> DataType<T> getDataType(Class<T> type) {
return getDataType(SQLDialect.H2, type);
}

View File

@ -135,7 +135,7 @@ public class HSQLDBDataType<T> extends AbstractDataType<T> {
super(SQLDialect.HSQLDB, sqlDataType, sqlDataType.getType(), typeName, castTypeName);
}
public static <T> DataType<T> getDataType(Class<? extends T> type) {
public static <T> DataType<T> getDataType(Class<T> type) {
return getDataType(SQLDialect.HSQLDB, type);
}

View File

@ -146,7 +146,7 @@ public class IngresDataType<T> extends AbstractDataType<T> {
super(SQLDialect.INGRES, sqlDataType, sqlDataType.getType(), typeName, castTypeName);
}
public static <T> DataType<T> getDataType(Class<? extends T> type) {
public static <T> DataType<T> getDataType(Class<T> type) {
return getDataType(SQLDialect.INGRES, type);
}

View File

@ -136,7 +136,7 @@ public class MySQLDataType<T> extends AbstractDataType<T> {
super(SQLDialect.MYSQL, sqlDataType, sqlDataType.getType(), typeName, castTypeName);
}
public static <T> DataType<T> getDataType(Class<? extends T> type) {
public static <T> DataType<T> getDataType(Class<T> type) {
return getDataType(SQLDialect.MYSQL, type);
}

View File

@ -157,7 +157,7 @@ public class OracleDataType<T> extends AbstractDataType<T> {
super(SQLDialect.ORACLE, sqlDataType, sqlDataType.getType(), typeName, castTypeName, hasPrecisionAndScale);
}
public static <T> DataType<T> getDataType(Class<? extends T> type) {
public static <T> DataType<T> getDataType(Class<T> type) {
return getDataType(SQLDialect.ORACLE, type);
}

View File

@ -153,7 +153,7 @@ public class PostgresDataType<T> extends AbstractDataType<T> {
super(SQLDialect.POSTGRES, sqlDataType, sqlDataType.getType(), typeName);
}
public static <T> DataType<T> getDataType(Class<? extends T> type) {
public static <T> DataType<T> getDataType(Class<T> type) {
return getDataType(SQLDialect.POSTGRES, type);
}

View File

@ -121,7 +121,7 @@ public class SQLiteDataType<T> extends AbstractDataType<T> {
super(SQLDialect.SQLITE, sqlDataType, sqlDataType.getType(), typeName);
}
public static <T> DataType<T> getDataType(Class<? extends T> type) {
public static <T> DataType<T> getDataType(Class<T> type) {
return getDataType(SQLDialect.SQLITE, type);
}

View File

@ -124,7 +124,7 @@ public class SQLServerDataType<T> extends AbstractDataType<T> {
super(SQLDialect.SQLSERVER, sqlDataType, sqlDataType.getType(), typeName, castTypeName);
}
public static <T> DataType<T> getDataType(Class<? extends T> type) {
public static <T> DataType<T> getDataType(Class<T> type) {
return getDataType(SQLDialect.SQLSERVER, type);
}

View File

@ -122,7 +122,7 @@ public class SybaseDataType<T> extends AbstractDataType<T> {
super(SQLDialect.SYBASE, sqlDataType, sqlDataType.getType(), typeName);
}
public static <T> DataType<T> getDataType(Class<? extends T> type) {
public static <T> DataType<T> getDataType(Class<T> type) {
return getDataType(SQLDialect.SYBASE, type);
}

View File

@ -55,7 +55,7 @@ public final class TestDataType<T> extends AbstractDataType<T> {
public static final DataType<String> STRING_TYPE = new TestDataType<String>(String.class);
public static final DataType<Date> DATE_TYPE = new TestDataType<Date>(Date.class);
protected TestDataType(Class<? extends T> type) {
protected TestDataType(Class<T> type) {
super(SQLDialect.ORACLE, null, type, type.getSimpleName());
}
}