我在同一个班级使用多个构造函数,但几天前我遇到了一个“罕见”的问题。构造函数初始化所有字段=(
我有Ejercicio.java类
public class Ejercicios {
int Id_Ejercicio;
String Descripcion;
String Finalidad;
String Duracion;
//Constructor
public Ejercicios() {
super();
}
//Constructor with 2 fields
public Ejercicios(int id_Ejercicio, String descripcion) {
super();
Id_Ejercicio = id_Ejercicio;
Descripcion = descripcion;
}
//Constructor with 4 fields
public Ejercicios(int id_Ejercicio, String descripcion, String finalidad, String duracion) {
super();
Id_Ejercicio = id_Ejercicio;
Descripcion = descripcion;
Finalidad = finalidad;
Duracion = duracion;
}
}
Lista_Ejercicios.java类
public class List_Ejercicios {
ArrayList<Ejercicios> lejer;
public List_Ejercicios() {
super();
}
}
我的主要课程,我尝试使用这些不同的构造函数
public Response Principal(SQLQuery){
List<Ejercicios> listaEJER = new ArrayList<Ejercicios>();
dbCon = new ConexionBD();
ResultSet rslt;
try {
conn = (Connection) ConexionBD.setDBConnection();
rslt = dbCon.getResultSet(SQLQuery, conn);
while(rslt.next()){
listaEJER.add(new Ejercicios( rslt.getInt(1),rslt.getString(2) ));
}
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//finally block code
return Response.ok(listaEJER.toArray()).build();
}
我正在使用Chrome的“高级休息客户端”,我不知道为什么我收到4个字段,而不是像我在构造函数中指定的那样
...
{
descripcion: "Jump as high as you can"
id_Ejercicio: 1
finalidad: null
duracion: null
}
...
我遇到麻烦,这些构造函数在两周前工作了,我不知道为什么它的运行目前不起作用。
答案 0 :(得分:2)
他们两周前做了不工作。你改变了一些东西。当您在班级中声明一个字段时,该字段始终。如果不在构造函数中初始化它,它将自动初始化。对于类,此默认值为null
,而对于基元,它为0
,false
等。但是,这与在构造函数中将其初始化为该值的行为完全相同 - myEjercicios.Finalidad
(请使用命名约定)将为null
,因为它是String
类型的自动初始化对象。
至于解决此问题,编写一些代码以打印null
的值并不困难。但是,如果您想要一组不同的字段,必须声明两个不同的类(可能一个扩展另一个)。