Java 类抽象和泛型
我需要扩展一个我无法修改的抽象类:Java 类抽象和泛型,java,generics,Java,Generics,我需要扩展一个我无法修改的抽象类: public abstract class CustomField<T> extends AbstractField<T> implements HasComponents { // some code @Override public abstract Class<? extends T> getType(); // some code } public抽象类CustomField扩展
public abstract class CustomField<T> extends AbstractField<T> implements HasComponents {
// some code
@Override
public abstract Class<? extends T> getType();
// some code
}
public抽象类CustomField扩展了抽象字段实现了组件{
//一些代码
@凌驾
公共抽象类您可以返回Class.Class.cast(HashSet.Class);
它将编译,但会给您一个未检查的分配警告。解释
你实际上所做的与此相当
public class VerticalCheckBoxSelect<T> extends CustomField<Set> {
@Override
public Class<? extends Set> getType() {
return ???;
}
}
@SotiriosDelimanolis我担心return???;
是不可编译的类
类型虽然是泛型的,但实际上不能与嵌套泛型一起工作。您需要一个未选中的cast。例如return(类由于类型擦除,我认为这是不可能的。也许这是一个。解释一下你想要实现什么。我们可以告诉你什么是可编译的,但要告诉你什么是正确的,我们需要更多的信息。方法实际应该返回什么,约束是什么,契约一般是什么?最后我使用了return Class.Class.cast(Set.Class);
但我认为您的解决方案是最干净的。
public class VerticalCheckBoxSelect<T> extends CustomField<Set> {
@Override
public Class<? extends Set> getType() {
return ???;
}
}
public class VerticalCheckBoxSelect<T> extends CustomField<Set<T>> {
@Override
public Class<? extends Set<T>> getType() {
@SuppressWarnings("unchecked")
Class<Set<T>> r = (Class) Set.class;
return r;
}
}
public class VerticalCheckBoxSelect<T> extends CustomField<Set<T>> {
@Override
public Class<? extends Set<T>> getType() {
@SuppressWarnings("unchecked")
Class<Set<T>> r = (Class) HashSet.class;
return r;
}
}