获取java中泛型(T在<;T扩展…>;)的名称

获取java中泛型(T在<;T扩展…>;)的名称,java,generics,Java,Generics,我有一个关于这个类和方法的例子: public class Runner<T extends Domain> implements Runnable { public void run() { ... Runtime.getRuntime().exec(...) ... } 公共类运行程序实现可运行{ 公开募捐{ ... Runtime.getRuntime().exec(…) ... } 我需要执行该文件,并将T的类型作为一个agment传递给它(或其他一

我有一个关于这个类和方法的例子:

public class Runner<T extends Domain> implements Runnable {

public void run() {
   ...
    Runtime.getRuntime().exec(...)
   ...
}
公共类运行程序实现可运行{
公开募捐{
...
Runtime.getRuntime().exec(…)
...
}
我需要执行该文件,并将T的类型作为一个agment传递给它(或其他一些字符串,允许我区分执行文件中的不同域,但T是扩展类
的类,其中
是一个抽象类)

我曾考虑添加一个返回类名称的静态方法,并调用
T.getName();
,但这在抽象类中是无法实现的

我该怎么做


谢谢!

private void runFile(Class classOfT){…}
private void runFile(Class classOfT){…}
将类型传递到类的构造函数中:

public class Runner<T extends Domain> implements Runnable {

    private Class<T> clazz;

    public Runner(Class<T> clazz) {
        this.clazz = clazz;
    }

    public void run() {
        // Use your class here
        String name = clazz.getName();
    }
}
公共类运行程序实现可运行{
私人课堂;
公共跑步者(班级){
this.clazz=clazz;
}
公开募捐{
//在这里上课
字符串名称=clazz.getName();
}
}

将类型传递给类的构造函数:

public class Runner<T extends Domain> implements Runnable {

    private Class<T> clazz;

    public Runner(Class<T> clazz) {
        this.clazz = clazz;
    }

    public void run() {
        // Use your class here
        String name = clazz.getName();
    }
}
公共类运行程序实现可运行{
私人课堂;
公共跑步者(班级){
this.clazz=clazz;
}
公开募捐{
//在这里上课
字符串名称=clazz.getName();
}
}

您可以为类创建构造函数,在其中可以传递
对象并使用它:

private Class<T> clazz;

public Runner(Class<T> clazz) {
    this.clazz = clazz;
}

// ...

public void runFile() {
    // do smth with
    clazz.getName()
}
私有类clazz;
公共跑步者(班级){
this.clazz=clazz;
}
// ...
公共void运行文件(){
//与…打交道
clazz.getName()
}

您可以为类创建构造函数,在其中可以传递
对象并使用它:

private Class<T> clazz;

public Runner(Class<T> clazz) {
    this.clazz = clazz;
}

// ...

public void runFile() {
    // do smth with
    clazz.getName()
}
私有类clazz;
公共跑步者(班级){
this.clazz=clazz;
}
// ...
公共void运行文件(){
//与…打交道
clazz.getName()
}

如果需要访问
runFile
方法中给定的
T
,可以将
T
作为参数传递并从那里引用它(例如
T.getClass().getName()
)。如果没有实际的
t
实例可供引用,则无法在
Runner
实例中发现
t
的运行时类型。好的,找到了。谢谢!如果需要访问
runFile
方法中给定的
t
,可以将
t
作为参数传递并从那里引用它(例如
t.getClass().getName()
)。你不能做的是在你的
Runner
实例中发现
t
的运行时类型,而没有一个实际的
t
实例可供参考。好的,明白了..谢谢!哈,同时使用相同的解决方案:)哈,同时使用相同的解决方案:)