[英]Using generic types with String.format in Java
我有一个像这样的通用类:
public class MyClass<T> {
private T var;
public MyClass(T init_value) {
var=init_value;
}
...
}
现在,我想向其中添加toString()
方法,该方法返回var
的具体类型和值。 我尝试这样的事情:
public String toString() {
return String.format("MyClass object initialized with type %s and value %s", T, var);
}
但是,这是行不通的,因为我有一个问题,即类型变量T似乎无法作为普通变量看到。 即,我得到一个错误:
T cannot be resolved to a variable
如何克服此问题并使类型变量可打印?
由于已经有了类T
对象,因此可以在其上使用getClass
:
String.format("MyClass object initialized with type %s and value %s", var.getClass().getSimpleName(), var);
如果您没有var
,则可以选择显式提供Class<T>
类型的参数:
public class MyClass<T> {
private Class<T> clazz;
public MyClass(Class<T> clazz) {
this.clazz = clazz;
}
public String toString() {
return String.format("Type of T: %s", clazz.getSimpleName());
}
}
你必须这样做,因为类型T
通常不因运行时访问类型擦除 。 唯一的例外是定义扩展显式参数化的类的类时: class MyIntegerClass extends MyClass<Integer>
。 在这种情况下,可以通过反射访问类型参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.