我想将String转换为子类数据类型,怎么做?或者有可能吗?
我有一个抽象类Acct
公共抽象类SinAcct扩展了Acct
公共类SavAcct扩展了SinAcct
在SavAcct中,有一个构造函数
public SavAcct(String acctNo, String name, ConsolidateAccount ownerAcct, double lastMonthBal){
super(acctNo,name,ownerAcct,lastMonthBal);
}
抽象类ConsolidateAccount扩展了帐户
我想要新建一个SavAcct,
new SavAcct(array[1],array[2],array[3],Double.parseDouble(array[4])
但它是错误构造函数SavAcct(String,String,String,double)未定义
谁能帮帮我? PLS答案 0 :(得分:3)
如果你真的想将String转换为其他类的对象。您可以有三种可能的解决方案: -
创建一个构造函数,它将String作为参数并进行适当的转换以创建Object。
有一个工厂方法,即getInstance(),它接受String参数并返回一个Object。
您可以使用与上述目的相同的方法。
修改强>
只是忘了提到String是一个在您的应用程序中无法修改或继承的最终类。
public Static SubClass getInstance(String str){
SubClass obj = new SubClass();
// ***the choice of constructor depends upon how u have created ur class
//use str to form the SubClass object in following lines
return obj;
}
比你可以用它
SubClass newObj = SubClass.getInstance("String value here");
答案 1 :(得分:3)
你应该有一个具体的类(非抽象类)扩展ConsolidateAccount
让我们说它是
public class ConcreteAccount extends ConsolidateAccount
然后你可以使用这样的东西。
ConsolidateAccount ownerAcct = new ConcreteAccount(array[3]);
new SavAcct(array[1],array[2],ownerAcct,Double.parseDouble(array[4]);
并在ConcreteAccount类
中创建构造函数public ConcreteAccount(String str)
答案 2 :(得分:3)
只是为了确保你没有走错路,而不是添加一个新的构造函数,它本质上需要像现有的构造函数一样调用super(acctNo,name,ownerAcct,lastMonthBal);
,为什么你不尝试创建或者看看使用array[3]
密钥修改ConsolidateAccount实例?
E.g。
ConsolidateAccount consolidateAccount = new ConcreteConsolidateAccount(array[3]);
new SavAcct(array[1],array[2],consolidateAccount,Double.parseDouble(array[4]);
ConcreteConsolidateAccount
是扩展ConsolidateAccount
的具体类。
看起来是一件更明智的事情。
当然我不知道ConsolidateAccount
周围的逻辑,或者即使它有一个带String
的构造函数,但这只是为了给你一个想法,因为它看起来像你需要调用SavAcct正在扩展的类的构造函数(这由超级调用指示)。
答案 3 :(得分:3)
你不能这样做,因为String类是final。你能组成代替继承吗? http://www.artima.com/designtechniques/compoinh.html
答案 4 :(得分:2)
不可能,String是最终的。
答案 5 :(得分:0)
java.lang.String
课程为final
,因此您无法对其进行扩展。你最多可以包装它。
答案 6 :(得分:0)
你有一个字符串数组,你调用的构造函数需要ConsolidateAccount
在第三个位置。您需要根据第三个ConsolidateAccount
实例化String
的子类型。没有详细信息可以帮助您如何做到这一点。此外,您从1开始索引数组。数组从零开始。