我在 GWT 中定义了一个具有通用类型的类,如下所示。当我用一个类型扩展这个类或为这个类指定一个类型时,一切都很好,但在运行时我收到“无法获得类 Filter 的类型签名”消息。
@SuppressWarnings("serial")
public class Filter<T extends Serializable> implements Serializable {
private FilterInfo<T> info;
private T value;
public Filter() { }
public FilterInfo<T> getInfo() {return info;}
public void setInfo(FilterInfo<T> info) { this.info = info; }
public T getValue() { return value; }
public void setValue(T value) {this.value = value;}
}
我从上面的类中删除了下面的代码,然后类可以正常工作。
private FilterInfo<T> info;
但是FilterInfo具备所有使用先决条件(Serializable, T extends Serializable, default Constructor)
@SuppressWarnings("serial")
public class FilterInfo<T extends Serializable> implements Serializable {
private String name;
private Class<?> type;
public FilterInfo() { }
public FilterInfo(String name, Class<?> type) {
setName(name); setType(type.getClass());
}
public String getName() { return name; }
...
最佳答案
Class<?>
不能被 GWT 序列化,因此 FilterInfo
也不是,因此 Filter
也不是.考虑到编译器需要保留编译器可以访问的所有可能的类文字,以支持这一点。
相反,要么找到一种不同的方式来描述 type
数据,或为 FilterInfo
构建 CustomFieldSerialize它可以从流中读取并确定将哪个类用作类型,如果有您支持的简单列表,或者创建注册表的简单方法。
关于java - 在 GWT 中,我无法获得类异常的类型签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47715049/