Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java中的反射来确定泛型类型的构造函数参数数量?_Java_Generics_Reflection - Fatal编程技术网

如何使用java中的反射来确定泛型类型的构造函数参数数量?

如何使用java中的反射来确定泛型类型的构造函数参数数量?,java,generics,reflection,Java,Generics,Reflection,我需要确定在泛型方法中,构造函数在运行时接受多少个参数。我知道每个类型T都扩展了相同的基类,并且每个类型都只有一个构造函数,但是它们的参数数量不同 public T someMethod() { // get amount of parameters T constructor takes } 有没有一种简单的方法可以实现这一点?没有。因为,没有办法从带有该签名的方法中找到关于T的任何信息 如果将方法更改为接受类型标记,则选择“是”: public T someMethod(Class

我需要确定在泛型方法中,构造函数在运行时接受多少个参数。我知道每个类型T都扩展了相同的基类,并且每个类型都只有一个构造函数,但是它们的参数数量不同

public T someMethod() {
    // get amount of parameters T constructor takes
}
有没有一种简单的方法可以实现这一点?

没有。因为,没有办法从带有该签名的方法中找到关于
T
的任何信息

如果将方法更改为接受类型标记,则选择“是”:

public T someMethod(Class<T> clazz) {
    // eg:
    Constructor<?>[] constructors = clazz.getConstructors();
    // eg:
    constructors[i].getParameterTypes();
}
publicsomemethod(类clazz){
//例如:
构造函数[]constructors=clazz.getConstructors();
//例如:
构造函数[i].getParameterTypes();
}
否。由于,无法从具有该签名的方法中找到有关
T
的任何信息

如果将方法更改为接受类型标记,则选择“是”:

public T someMethod(Class<T> clazz) {
    // eg:
    Constructor<?>[] constructors = clazz.getConstructors();
    // eg:
    constructors[i].getParameterTypes();
}
publicsomemethod(类clazz){
//例如:
构造函数[]constructors=clazz.getConstructors();
//例如:
构造函数[i].getParameterTypes();
}

该信息在运行时不可用,并且不能将
t
用作构造函数。你想完成什么?反射很可能是不必要的。基本上,我正在试图找到一种方法来创建一个T类型的对象,从这个方法返回。我不确定这是一个很难回答的问题。没有给出足够的信息。显示整个类,然后可以假定您知道运行时的T类型,对吗?如果是,请按照答案中的示例输入
。虽然我猜有更好的方法来做你想做的事情。@ChristopherSchneider正确,我确信有很多更好的方法来实现它,但这就是我想到的。当前正在尝试传递类,它似乎正在按预期工作。该信息在运行时不可用,并且您不能将
t
用作构造函数。你想完成什么?反射很可能是不必要的。基本上,我正在试图找到一种方法来创建一个T类型的对象,从这个方法返回。我不确定这是一个很难回答的问题。没有给出足够的信息。显示整个类,然后可以假定您知道运行时的T类型,对吗?如果是,请按照答案中的示例输入
。虽然我猜有更好的方法来做你想做的事情。@ChristopherSchneider正确,我确信有很多更好的方法来实现它,但这就是我想到的。目前正在尝试通过课程,它似乎正在按预期工作。