如果我有一个像这样的抽象类:
public abstract class Item
{
private Integer value;
public Item()
{
value=new Integer(0);
}
public Item(Integer value)
{
this.value=new Integer();
}
}
还有一些从Item派生的类是这样的:
public class Pencil extends Item
{
public Pencil()
{
super();
}
public Pencil(Integer value)
{
super(value);
}
}
我不明白为什么我不能使用泛型调用构造函数:
public class Box <T extends Item>
{
T item;
public Box()
{
item=new T(); // here I get the error
}
}
我知道可以有一个没有构造函数的类型,但是这种情况是不可能的,因为Pencil具有没有参数的构造函数,而Item是抽象的。但是我从eclipse中得到了这个错误:
无法实例化
我不明白为什么的 T类型 ,以及如何避免这种情况?
无法使用Java类型系统来强制类层次结构为其子类的构造函数具有统一的签名。
考虑:
public class ColorPencil extends Pencil
{
private Color color;
public ColorPencil(Color color)
{
super();
this.color=color;
}
}
这使ColorPencil成为有效的T(它扩展了Item)。但是,此类型没有no-arg构造函数。因此,T()是无意义的。
要执行您想要的操作,您需要使用反射。您不能从编译时错误检查中受益。
假设我有以下课程: 我想添加一个构造函数,它需要一个
问题内容: 我想创建一个KeyValue类,但以通用方式,这就是我写的内容: 错误显示:“令牌“>上的语法错误”,此令牌后应有标识符” 那我该如何在Java中创建一个通用构造函数呢? 问题答案: 您需要从构造函数的签名中删除:它已经隐式存在。
问题内容: 是否可以为特殊/构造的泛型类型扩展泛型类?我想使用一种方法来扩展Int Arrays,以计算其元素的总和。 例如 问题答案: Swift 5.x:
我试图在静态编程语言中创建一个非常简单的泛型NDArray类,它将lambda表达式作为初始化函数。 典型的用法是: 我的问题是Kotlin编译器抱怨构造函数中值的初始化 通过说“不能使用‘T’作为具体化类型参数。改用类”。为什么? 编辑: 如果我用我自己的MyArray替换静态编程语言Array实现,它会编译: 不确定为什么静态编程语言对待MyArray与常规数组不同,当两者具有相同的构造函数时
我正在做作业,所以我只想修复我的编译错误,这样我就可以继续工作了。我需要创建一个PointList类,在ArrayList中保存一个Point对象列表。PointList类应该接受任何作为Point类实例或Point子类的对象。 我不断收到一个编译器错误,上面写着 我真的不明白我错过了什么,我已经通读了这本书,似乎不明白为什么我会得到这个错误。我已经制作了 Point 类并完成了测试,但似乎无法编
问题内容: 我想知道是否有人可以向我解释这种语法: 我不了解ClientOption发生了什么。指向客户端的函数类型会返回错误吗?然后在NewClient中,它看起来像接受了ClientOption类型的数组并返回了指向Client的新指针。我不确定这是否正确,是否有人可以解释得更多,或者给我一个类似于许多Javascript库所做的类比的不确定性, 在构造函数中。 问题答案: ClientOpt