我在GWT中定义了一个类如Generic类的类。当我使用类型扩展此类或为此类指定类型时,一切都没问题,但在运行时我得到“无法获取类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,默认构造函数)
@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; }
...
答案 0 :(得分:2)
Class<?>
不可由GWT序列化,因此FilterInfo
也不可序列化,因此Filter
也不是type
。考虑到编译器需要保留编译器可以访问的所有可能的类文字,以便支持这一点。
相反,要么找到一种不同的方式来描述FilterInfo
数据,要么为TradingView
构建一个CustomFieldSerialize,它可以从流中读取并找出要用作类型的类,如果有的话您支持的简单列表,或者制作注册表的简便方法。