Java:如何将String转换为子类数据类型?

时间:2012-04-25 10:46:11

标签: java

我想将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

7 个答案:

答案 0 :(得分:3)

如果你真的想将String转换为其他类的对象。您可以有三种可能的解决方案: -

  1. 创建一个构造函数,它将String作为参数并进行适当的转换以创建Object。

  2. 有一个工厂方法,即getInstance(),它接受String参数并返回一个Object。

  3. 您可以使用与上述目的相同的方法。

  4. 修改

    只是忘了提到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,因此您无法对其进行扩展。你最多可以包装它。

请参阅Can I add new methods to the String class in Java?

答案 6 :(得分:0)

你有一个字符串数组,你调用的构造函数需要ConsolidateAccount在第三个位置。您需要根据第三个ConsolidateAccount实例化String的子类型。没有详细信息可以帮助您如何做到这一点。此外,您从1开始索引数组。数组从零开始。