【问题标题】:Generis method got error cannot be referenced from a static context [duplicate]无法从静态上下文引用 Generis 方法出错 [重复]
【发布时间】:2018-05-11 10:21:19
【问题描述】:

我尝试为其他类创建通用方法。但是我收到了一个错误
cannot be referenced from a static context
如何为GetInstance做泛型方法

public class Instance<T> {

    private static final Instance<?> mInstance = new Instance<>(null);

    @SuppressWarnings("unchecked")
    public static Instance<T> GetInstance() { //Got error
        // Make generic static instance.
        // Strategy used similar to Collections.emptyList() implementation
        return (Instance<T>) mInstance; //Got Error
    }

    protected Instance(Context context) {

    }
}


 public static DataController GetDataController(@Nullable  Context context) {
    DataController dataController = (DataController) DataController.GetInstance();
    if(dataController == null) {
        return new DataController(context);
    }

    return dataController;
}

【问题讨论】:

    标签: java android generics


    【解决方案1】:

    试试这个。这是远古的德鲁伊魔法

    public static <T> Instance<T> GetInstance() {
        return (Instance<T>) mInstance;
    }
    

    【讨论】:

    • 感谢大家的快速回复。
    • @ManLokWong,L.Spillner 的答案是更多信息,将其标记为正确 :)
    【解决方案2】:

    静态方法是类的属性而不是类的实例,因此不能引用类的泛型。

    但是,您仍然可以通过直接向方法添加类型引用来创建泛型方法:

    public static <T> Instance<T> GetInstance() {...}
    

    甚至绑定它:

    public static <T extends Comparable<T>> Instance<T> GetInstance() {...}
    

    但是,如果编译器无法自行推断,您可能需要传递类型参数:

    Instance.<Integer> GetInstance();
    

    【讨论】:

    • 感谢大家的快速回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多