Fabian Schwahn
2006-06-14 10:05:55 UTC
Hallo,
ich habe ein Problem mit Generics.
Es gibt folgende Klassen:
public abstract class Column<T> {
protected T columnValue;
(...)
public T getValue() {
return columnValue;
}
public void setValue(T value) {
if (value != null) {
columnValue = value;
}
}
}
Außerdem existieren diverse konkrete Unterklassen dieser Klasse, z.B.:
public class ColumnText extends Column<String> { (...) }
public abstract class Table {
private ArrayList<Column> columnList;
(...)
public Column getColumn(String columnName) {
if (columnName == null) {
return null;
}
for (Column c: columnList) {
if (columnName.equals(c.getColumnName())) {
return c;
}
}
// no matching column found
return null;
}
(...)
}
Eine Table besteht also aus einer Liste von Columns.
Wenn ich nun die Methode getColumn() in Table aufrufe erhalte ich
folgende Warnung:
table.getColumn("A_ID").setValue(new Long(1));
"Type safety: The method setValue(Object) belongs to the raw type
Column. References to generic type Column<T> should be parameterized"
Wenn ich nun die parametrisierte Variante mit dem Wildcard ? verwende,
bekomme ich folgenden Error:
"The method setValue(capture-of ?) in the type Column<capture-of ?> is
not applicable for the arguments (Long)"
Vielen Dank schonmal.
ich habe ein Problem mit Generics.
Es gibt folgende Klassen:
public abstract class Column<T> {
protected T columnValue;
(...)
public T getValue() {
return columnValue;
}
public void setValue(T value) {
if (value != null) {
columnValue = value;
}
}
}
Außerdem existieren diverse konkrete Unterklassen dieser Klasse, z.B.:
public class ColumnText extends Column<String> { (...) }
public abstract class Table {
private ArrayList<Column> columnList;
(...)
public Column getColumn(String columnName) {
if (columnName == null) {
return null;
}
for (Column c: columnList) {
if (columnName.equals(c.getColumnName())) {
return c;
}
}
// no matching column found
return null;
}
(...)
}
Eine Table besteht also aus einer Liste von Columns.
Wenn ich nun die Methode getColumn() in Table aufrufe erhalte ich
folgende Warnung:
table.getColumn("A_ID").setValue(new Long(1));
"Type safety: The method setValue(Object) belongs to the raw type
Column. References to generic type Column<T> should be parameterized"
Wenn ich nun die parametrisierte Variante mit dem Wildcard ? verwende,
bekomme ich folgenden Error:
"The method setValue(capture-of ?) in the type Column<capture-of ?> is
not applicable for the arguments (Long)"
Vielen Dank schonmal.