有没有办法在Java中传递Number作为参数?

时间:2009-01-11 00:07:32

标签: java generics

我正在分配一个T数组,T在一个类中扩展Number。我可以这样做:

myClass test = new myClass(Double.class, 20);

然后是构造函数本身:

myClass(Class<T> type, size)
{
    array = (T[]) Array.newInstance(type, size);
}

我想知道是否可以这样做:

myClass(Number n, size)
{
    array = (T[]) Array.newInstance(n.getClass(), size);
}

但是,我尝试使用第二个构造函数实例化一个对象:

myClass test = new myClass(Double, 15);

它不起作用。我做错了什么,或者只是不可能?

3 个答案:

答案 0 :(得分:4)

您不能在Java中使用类名作为输入参数。引入了Object.class以允许传递“类名”

所以答案是否定的,您不能将Number作为参数传递,但可以传递Number.class。这就是它的意思:))

**更新**

同样来自你的第二个构造函数定义

myClass(Number n, int size)
{
    array = (T[]) Array.newInstance(n.getClass(), size);
}

很明显,输入参数是Number的实例,或者它的子类不是类本身。我知道这很明显,但它更清楚为什么不可能做你想做的事情

答案 1 :(得分:1)

您应该使用:

myClass test = new myClass( Double.class, 15 );

您错过了.class部分。

答案 2 :(得分:1)

你也应该

myClass(Class<T> type, int size)