【发布时间】:2016-01-10 17:14:26
【问题描述】:
使用 javac 时出现以下错误(与 java 泛型有关)
:inconvertible types
[ERROR] required: (...)
[ERROR] found: (...)
代码在 Eclipse 中编译良好(因为它没有使用 javac )。
我在以下代码中遇到错误:
public <T extends Comparable<T>> TRange<T> valueToRange(T val, List<T> rangeValues) {
List<T> vals = rangeValues;
if (vals == null) {
vals = (List<T>) (this.values != null ? this.values : this.defaultValues);
}
return valueToRange(val, vals, this.range);
}
其中值和defaultValues 的类型为List 的Serializable
和
public static <T extends Enum<T> & Unit> Class<T> getEnumClass(String unitValueClassName) {
unitValueClassName = normalizeEnumClassName(unitValueClassName);
if (unitValueClassName.equals(DENSITY_CLS)) {
return (Class<T>) DensityUnit.class;
}
if (unitValueClassName.equals(LENGTH_CLS)) {
return (Class<T>) LengthUnit.class;
}
if (unitValueClassName.equals(LENGTH_OPTIONAL_CLS)) {
return (Class<T>) LengthUnit.class;
}
if (unitValueClassName.equals(VOLUME_CLS)) {
return (Class<T>) VolumeUnit.class;
}
if (unitValueClassName.equals(WEIGHT_CLS)) {
return (Class<T>) WeightUnit.class;
}
if (unitValueClassName.equals(TIME_CLS)) {
return (Class<T>) TimeUnit.class;
}
throw new IllegalArgumentException("Please add the enum class to UnitValueView.getEnumClass(String) : " + unitValueClassName);
}
我们能否以另一种方式重写它们,保持相同的功能但通过 javac 编译器?
【问题讨论】:
-
您为什么选择不发布您的问题所涉及的错误消息?
-
首先,
(Class<T>)因为类型擦除而毫无结果。应该是(Class<?>),这是您可以安全获得的更精确的值。如果你真的需要它是通用的,你应该打电话给Class.cast -
在第一个示例中,您尝试将
List<Serializable>转换为List<T>- 为什么?
标签: java eclipse generics compilation javac