在Java中对泛型类型参数调用静态方法

在Java中对泛型类型参数调用静态方法,java,Java,我希望在Java中有类似的内容: import java.util.List; class Query<T> { public List<T> fetch() { // Get the table name, T.tableName() // Fetch from /api/<table_name> // Parse and return data, T.parseJSON(jsonData)

我希望在Java中有类似的内容:

import java.util.List;

class Query<T> {
    public List<T> fetch() {
        // Get the table name, T.tableName()
        // Fetch from /api/<table_name>
        // Parse and return data, T.parseJSON(jsonData)
    }
}

如何在
Query
类中编写
fetch
函数

只需传递类型为
T
的实例,就可以访问该类型的方法。注意这些评论

public List<T> fetch(T instance) {
    // Get the table name, instance.TableName();

    // Fetch from /api/<table_name>
    // Parse and return data, instance.parseJSON(jsonData)
}
公共列表获取(T实例){
//获取表名,instance.TableName();
//从/api获取/
//解析并返回数据,instance.parseJSON(jsonData)
}

这是不可能的;
T
的具体实例在编译时是未知的,而编译时是解析所有静态方法的时候

一种常见的方法是将
查询
抽象化,并提供一种方法:

protected abstract T parse(String data);
您还可以使用组合:让
Query
在其构造函数中获取
函数
,并在
fetch()中使用它。但无论如何,您必须在运行时解决一些问题,这对于静态方法是不可能的

如果使用组合方法,则可以将json读取函数传递给每个方法,而不是构造函数:

public List<T> fetch(Function<String, T> parser) {
    ...
}

为什么这些方法需要是静态的?它们不需要是静态的。但是,如果它们是实例方法,我没有使用它们的
文章
对象。如何为列表创建多个
t
实例?如何在一个无界泛型
T
上调用
instance.parseJSON
?这两个问题都是可以解决的,但是当你解决它们的时候,你基本上已经用一种更复杂的方式写了一个
函数了。我不是说这是一个“好方法”,我只是想在OP创造的条件下给他一个答案。更好的方法是提供一个
fetch
,它使用一个实例来描述所需的所有信息。
public List<T> fetch(Function<String, T> parser) {
    ...
}
public class Query {
    public List<T> fetch(Function<String, T> parser) {
        ...
    }
}