Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java注释将类替换为派生类_Java_Eclipse_Netbeans_Reflection_Annotations - Fatal编程技术网

使用Java注释将类替换为派生类

使用Java注释将类替换为派生类,java,eclipse,netbeans,reflection,annotations,Java,Eclipse,Netbeans,Reflection,Annotations,假设我扩展了一个Java类,比如Java.util.List,以创建一个名为MyList的自定义类。。。如果我的同事使用List编写代码,我是否可以在编译/运行时将其转换为MyList i、 e.如果他们有以下情况: List groceryList = new List(); 它应该像以下那样编译/运行: MyList groceryList = new MyList(); 我知道注释可以做这种事情。在这种情况下可以使用它们吗?如果是,如何进行?这称为 简单的回答是,如果他们使用new命令

假设我扩展了一个Java类,比如
Java.util.List
,以创建一个名为
MyList
的自定义类。。。如果我的同事使用
List
编写代码,我是否可以在编译/运行时将其转换为
MyList

i、 e.如果他们有以下情况:

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);
这被称为

简单的回答是,如果他们使用
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中的向上转换基本上是安全的,除非真的需要,否则不应该经常使用,因为子类可能不支持超类可以支持的某些属性或方法。

但这意味着我必须在任何地方使用MyList。我想要的是,如果我的同事使用列表,我希望它被编译为MyList。我在MyList中做了某些增强,我的同事不会直接使用这些增强。但我希望他们的代码能被编译成这样。向下转换不能满足这一需求,但由于编译器无法识别增强功能或新方法,因此可能会出现编译错误。但我想我明白了。。我不知道有哪种编译器能做到这一点。您可能希望将列表对象注释为MyList..而且您也不必到处使用MyList,因为您可以将MyList保存到列表变量中。但是如果我根本不希望字节码中有任何列表对象,该怎么办?我只希望在最终结果中显示MyList对象。我在这里举的例子是列表。在实际使用中,它可能是我不想向其他人公开的任何自定义类。然后我们将不得不等待比我更聪明的人回答:)但这意味着我必须在任何地方使用MyList。我想要的是,如果我的同事使用列表,我希望它被编译为MyList。我在MyList中做了某些增强,我的同事不会直接使用这些增强。但我希望他们的代码能被编译成这样。向下转换不能满足这一需求,但由于编译器无法识别增强功能或新方法,因此可能会出现编译错误。但我想我明白了。。我不知道有哪种编译器能做到这一点。您可能希望将列表对象注释为MyList..而且您也不必到处使用MyList,因为您可以将MyList保存到列表变量中。但是如果我根本不希望字节码中有任何列表对象,该怎么办?我只希望在最终结果中显示MyList对象。我在这里举的例子是列表。在实际使用中,它可能是我不想向他人公开的任何自定义类。然后我们将不得不等待比我更聪明的人回答:)为什么不将
列表中的所有内容复制到新的
MyList
?@Sweeper:我不想修改别人编写的代码。MyList不会以任何功能性方式更改列表。除了它有一些额外的方便调整。正如我的回答中所说,你不必修改他们的代码,只需使用他们的列表在你自己的代码中创建新的MyList。你为什么不把所有的东西从
列表
复制到一个新的
MyList
?@Sweeper:我不想修改别人写的代码。MyList不会以任何功能性方式更改列表。除了它还有一些额外的方便性调整。正如我的回答中所说,你不必修改他们的代码,只需使用他们的列表在你自己的代码中创建新的MyList。