繁体   English   中英

在Java中将通用类型与String.format一起使用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM