我正在分配一个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);
它不起作用。我做错了什么,或者只是不可能?
答案 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)