在 Java 中设置通用变量值

Setting generic variable value in Java

我有一个全局变量页面

private T page

另外,我还有一个setter方法;

public <T> void setGenericVar(T page) {
this.page = page
}

我在主程序中的调用是这样的;

setGenericVar("one");
setGenericVar(1);

我得到的错误是在 setter 方法中,它是:

Required type: T
Provided: T
"Change parameter 'page' type to 'T'"

我在函数中需要一个 T 参数,但我也在证明它,所以我没有收到这个错误!

编辑:此代码出现问题:

public class GenericVariables<T> {
   private T page;
   public void main (String args[]) {
     setGenericVar(2);
   }
   public <T> void setGenericVar(T page) {
     this.page = page
   } 
}

问题的发生是因为 lealceldeiro 在评论中提到的:您在 class 和方法上指定了一个类型参数。它们都被命名为 T,但它们是不同的类型参数,因此它们确实不同。

public class GenericVariables<T> { // Type parameter <T> on class here
    private T page;

    public void main (String args[]) {
        setGenericVar(2);
    }

    // Type parameter <T> on method here
    public <T> void setGenericVar(T page) {
        this.page = page;
    } 
}

如果你给它们起不同的名字,会更容易看出是怎么回事:

public class GenericVariables<T> {
    private T page;

    public void main (String args[]) {
        setGenericVar(2);
    }

    public <U> void setGenericVar(U page) {
        // ERROR: this.page is of type T, but the parameter page is of type U
        this.page = page;
    } 
}

解决方法:去掉方法中的类型参数;让它使用 class.

的类型参数
public class GenericVariables<T> {
    private T page;

    public void main (String args[]) {
        setGenericVar(2);
    }

    public void setGenericVar(T page) {
        this.page = page;
    } 
}

注意:您的 main 方法不是 static,因此 Java 不会将其视为程序的入口点;你不能 运行 你的程序从这个 main 方法开始。你需要做到 static。如果这样做,则无法直接调用 setGenericVar 方法。您需要创建 class 的实例并调用该实例的方法:

public class GenericVariables<T> {
    private T page;

    public static void main (String args[]) {
        GenericVariables<Integer> object = new GenericVariables<>();
        object.setGenericVar(2);
    }

    public void setGenericVar(T page) {
        this.page = page;
    } 
}