无法静态引用非静态类型t

时间:2019-08-01 13:06:12

标签: java generics

我正在尝试创建一个静态方法,该方法返回一个与该静态方法所属的类相同的泛型对象,但返回类型为

时出现编译错误
  

无法静态引用非静态类型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。如何使它与静态方法一起工作。

3 个答案:

答案 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;
    }

}