如何使用最少的代码编辑更改属性类型?

时间:2016-01-21 10:19:37

标签: java oop

我有一个自定义类Bus,其字段为int number。因此,构造函数在创建新对象时需要int

class Bus {
    int number;
    Bus(int n) {
        number = n;
    }
}

使用上面提到的构造函数创建了一些对象 Bus bus = new Bus(21);等等。


现在我希望将数据类型更改为String而不是int。 如果我只是更改Bus类中的数据类型,我将不得不更改我已经创建的所有对象,如果有数百个对象,这将是很多工作。
我想知道是否有更简单,更聪明的方法来做出这些改变并避免大量的工作。或者是否有更好的方法来实现该类,以便这些更改很容易实现?

谢谢!

4 个答案:

答案 0 :(得分:1)

您可以在Bus类中添加另一个构造函数并保留现有构造函数:

String number;

Bus(int n) {
    this( String.valueof(n) ); // or do other thing, as you need
}

Bus(String n) {
    number = n;
}

但可能不是一个好主意。如果可以,您应该删除旧的构造函数并为每个现有调用执行完整的重构。这样做,您可以避免维护不再使用的代码。如果你不能这样做,请考虑保留以前的构造函数并使用@deprecated注释,以便不再使用它。

答案 1 :(得分:1)

只需在构造函数中转换int。

class Bus {

    String number;

    Bus(int n) {
        this(Integer.toString(n));
    }

    Bus(String n) {
        number = n;
    }
}

答案 2 :(得分:0)

您可以在对象层次结构中选择一个比int和string更高的对象,例如object。然后,您可以像在每种方法中一样操纵该对象。

public class HelloWorld{
     public Object n;
     public HelloWorld(Object n){
         this.n = n;
     }
     public static void main(String []args){
        System.out.println("Hello World");
        HelloWorld magic = new HelloWorld(23);
        System.out.print(magic.n);System.out.print("\n");
     }
}

老实说O O设计专业人员会咬我的头...... 打印::

HelloWorld                                          
23

答案 3 :(得分:0)

您可以更改数据类型,只需转换为相同的构造函数。

 $("#submit").click(function(event) {                
        var category_id = {};
        category_id['linkgen'] = $("#linkgen").val();
        $.ajax({    
          type: "GET",
          url: "generatedlink.php",        
          dataType: "html",   
          data: category_id,         
          success: function(response){ 
             window.open('generatedlink.php');  
          }
        }); 
      });