如何解决Java:实例化一个带有“错误”参数的抽象类
假设我有这个不可修改的类:
public abstract class MyClass {
int value;
/** @version 1.0 */
MyClass(int value) { this.value = value; }
}
这是一个程序“版本 1.0”的代码。 “版本 1.1”有这个:
public abstract class MyClass {
String value;
/** @version 1.1 */
MyClass(String value) { this.value = value; }
}
我需要在使用 1.0 API 时初始化 1.1 构造函数。例如:
/** initializing on version 1.0 */
MyClass clazz = new MyClass("str");
显然不起作用,因为 1.0 API 需要一个 int。另一个问题是该类是抽象的。我也不能将 1.1 API 用于与我的应用程序相关的非常具体的事情。那么,使用意外参数初始化抽象类的方法是什么?反射会丢弃 InstantiationException。
解决方法
没有办法创建一个类的实例(抽象的或其他的),向它传递一个与构造函数声明的签名不匹配的参数。
如果你想让 1.1 版本与 1.0 兼容,你需要同时拥有 1.0 和 1.1 构造函数。例如,您可以这样编码:
public abstract class MyClass {
String value;
/** @version 1.1 */
MyClass(String value) { this.value = value; }
/** @version 1.0 */
MyClass(int value) { this.value = Integer.toString(value); }
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。