在 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;
}
}
我有一个全局变量页面
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;
}
}