我正在尝试创建一个静态方法,该方法返回一个与该静态方法所属的类相同的泛型对象,但返回类型为
时出现编译错误无法静态引用非静态类型T
看着堆栈溢出的其他解决方案,我发现了这一点 (Generics)Cannot make a static reference to the non-static type T
响应者提供的答案表明,对于静态方法,我们还必须在返回类型之前包括目标类型,但即使这样也不起作用
public class Condition<T extends Node> {
private boolean isInitialized=false;
private ConditionType type;
private NodeType nodeType;
private String propertyName;
private Predicate<T> onlyIfTest;
private Predicate<T> predicates;
private Condition() {
}
//Here at the return type i get the error Cannot make static...
public static Condition<T> include(NodeType type,String propertyName) {
Condition<T> condition = new Condition<T>(); //and an error here too
condition.type = ConditionType.INCLUDE;
condition.nodeType = type;
condition.propertyName = propertyName;
condition.isInitialized =true;
return condition;
}
我得到的错误是无法静态引用非静态类型T。如何使它与静态方法一起工作。
答案 0 :(得分:2)
Condition
的每个实例都有自己的通用类型T
。静态方法中没有任何内容指示T
应该是什么。如果需要的话,可以将<T>
作为通用类型参数添加到静态方法中。
例如:
public static <T> Condition<T> include(NodeType type, String propertyName) {
...
}
答案 1 :(得分:0)
您已经有了答案:
我们还必须在返回类型之前包括目标类型
但未应用。
sizeof(boost::dynamic_bitset<>)
答案 2 :(得分:0)
我认为您的语法错误
public class Condition<T> {
//...
public static <T> Condition<T> include() {
Condition<T> condition = new Condition<T>();
return condition;
}
}