【问题标题】:Java: How to convert a String into an subclass data type?Java:如何将字符串转换为子类数据类型?
【发布时间】:2012-04-25 10:46:11
【问题描述】:

我想把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) 未定义

有人可以帮助我吗?请

【问题讨论】:

  • 我猜他在问是否以及如何扩展字符串
  • 你能说得更具体点吗?很难得到你真正想要的东西。您是否有对象的字符串表示形式并想从中创建对象?
  • String 类被声明为 final 所以它不能被扩展。
  • 能否将构造函数调用连同其参数初始化一起添加到您的问题中

标签: java


【解决方案1】:

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

例如

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

其中ConcreteConsolidateAccount 是扩展ConsolidateAccount 的具体类。

看起来更明智的做法。

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

【讨论】:

  • ConsolidateAccount是抽象类,不能实例化
  • @NitinChhajer 抱歉,没看到这个。我会改变答案。
【解决方案2】:

你应该有一个扩展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)

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      2. 有一个工厂方法,即 getInstance(),它接受字符串参数并返回一个对象。

      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");
      

      【讨论】:

      • 有什么例子可以给我参考一下方法二吗?
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            猜你喜欢
            • 2021-12-22
            • 1970-01-01
            • 1970-01-01
            • 2021-04-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多