假设我扩展了一个像java.util.List
这样的Java类来创建一个名为MyList
的自定义类...如果我的同伴使用List
编写代码,有什么办法,我可以把它转换成编译/运行时期间MyList
?
即。如果他们有类似的东西:
List groceryList = new List();
它应该编译/运行,如:
MyList groceryList = new MyList();
我知道注释可以做这种事情。在这种情况下可以使用它们吗?如果是,怎么样?
答案 0 :(得分:0)
这称为downcasting。
简短的回答是,如果他们使用new
命令创建对象,例如在您的示例中,那么不,您将无法投射它。
您可以做的是在MyList
类中定义一个构造函数,该构造函数接受要转换的对象作为参数并使用它来创建新对象。该列表有点特殊,因为您可以create new lists from existing ones。例如:
public MyList (List oldList)
{
super(oldList); //this will copy the objects of the list to your custom list
//But you could do any other operations to create the new object from the parameter(s)
...
}
并将其用作
MyList groceryList = new MyList(oldList);
答案 1 :(得分:0)
虽然java中的upcast大多是安全的,但Downcasting in Java并不是你经常使用的东西,除非确实需要,因为子类可能不支持超类可以使用的某些属性或方法。