我有一个自定义类Bus
,其字段为int number
。因此,构造函数在创建新对象时需要int
。
class Bus {
int number;
Bus(int n) {
number = n;
}
}
使用上面提到的构造函数创建了一些对象
Bus bus = new Bus(21);
等等。
现在我希望将数据类型更改为String
而不是int
。
如果我只是更改Bus
类中的数据类型,我将不得不更改我已经创建的所有对象,如果有数百个对象,这将是很多工作。
我想知道是否有更简单,更聪明的方法来做出这些改变并避免大量的工作。或者是否有更好的方法来实现该类,以便这些更改很容易实现?
谢谢!
答案 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');
}
});
});