2

我想将String转换为子类数据类型,怎么做?或者有可能吗?

我有一个抽象类Acct

公共抽象类 SinAcct 扩展 Acct

公共类 SavAcct 扩展 SinAcct

在 SavAcct 中,有一个构造函数

public SavAcct(String acctNo, String name, ConsolidateAccount ownerAcct, double lastMonthBal){
        super(acctNo,name,ownerAcct,lastMonthBal);

    }

一个抽象类 ConsolidateAccount 扩展了 Account

我想新建一个 SavAcct,

new SavAcct(array[1],array[2],array[3],Double.parseDouble(array[4])

但这是错误构造函数 SavAcct(String, String, String, double) 未定义

任何人都可以帮助我吗?请

4

7 回答 7

3

你不能这样做,因为 String 类是最终的。你能用组合代替继承吗?http://www.artima.com/designtechniques/compoinh.html

于 2012-04-25T11:14:35.647 回答
3

你应该有一个具体的类(非抽象类)扩展ConsolidateAccount让我们说它是

public class ConcreteAccount extends ConsolidateAccount

然后你可以使用这样的东西。

ConsolidateAccount ownerAcct = new ConcreteAccount(array[3]);
new SavAcct(array[1],array[2],ownerAcct,Double.parseDouble(array[4]);

public ConcreteAccount(String str)并在您的 ConcreteAccount 类中创建一个构造函数

于 2012-04-25T11:06:31.767 回答
3

只是为了确保您没有走错路,而不是添加一个基本上需要super(acctNo,name,ownerAcct,lastMonthBal);像现有构造函数一样调用的新构造函数,您为什么不尝试使用您的array[3]密钥创建或查找 ConsolidateAccount 实例?

例如

ConsolidateAccount consolidateAccount = new ConcreteConsolidateAccount(array[3]);
new SavAcct(array[1],array[2],consolidateAccount,Double.parseDouble(array[4]);

ConcreteConsolidateAccount具体类在哪里扩展ConsolidateAccount

看起来是更明智的做法。

当然我不知道周围的逻辑ConsolidateAccount,或者即使它有一个带 a 的构造函数String,但这只是给你一个想法,因为看起来你需要调用 SavAcct 正在扩展的类的构造函数(这由 super 调用指示)。

于 2012-04-25T11:08:36.880 回答
3

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

  1. 创建一个以字符串为参数并进行适当转换以创建对象的构造函数。

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

  3. 您可以有一种可用于与上述相同目的的方法。

编辑

只是忘了提到 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");
于 2012-04-25T10:51:07.397 回答
2

不可能,字符串是最终的。

于 2012-04-25T10:48:24.120 回答
0

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

于 2012-04-25T11:06:52.350 回答
0

该类java.lang.Stringfinal,因此您无法扩展它。你最多可以把它包起来。

请参阅我可以向 Java 中的 String 类添加新方法吗?

于 2012-04-25T10:49:05.640 回答