假设我扩展了一个像java.util.List
这样的Java类来创建一个名为MyList
的自定义类…是否有任何方法,如果我的同行使用List
编写代码,我可以在编译/运行时将其转换为MyList
?
。如果他们有这样的内容:
List groceryList = new List();
应该这样编译/运行:
MyList groceryList = new MyList();
我知道注释可以做这类事情。在这种情况下可以使用它们吗?如果是,怎么做?
这被称为向下转换。
简短的回答是,如果他们使用new
命令创建对象,例如在您的示例中,那么不,您将无法强制转换它。
你能做的是在MyList
类中定义一个构造函数,它接受要转换的对象作为参数,并使用它来创建一个新对象。该列表有点特殊,因为您可以从现有列表创建新列表。例如:
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);
虽然在java中向上转换是安全的,但在java中向下转换是不应该经常使用的,除非真的需要,因为子类可能不支持超类可以支持的某些属性或方法。