public class Persona {
int Codigo;
String Nombre;
public Persona(int Codigo, String Nombre){
this.Codigo = Codigo;
this.Nombre = Nombre;
}
public void setCodigo(int Codigo){
this.Codigo = Codigo;
}
public int getCodigo(){
return this.Codigo;
}
public void setNombre(String Nombre){
this.Nombre = Nombre;
}
public String getNombre(){
return this.Nombre;
}
}
还是有一种更短(可行)的方式吗?
答案 0 :(得分:11)
这取决于你所说的“做”。吸气剂和制定者比公共领域更好 - 但你真的首先需要它们吗?
只是为了“纠正”您当前的设计,假设您 想要获取getter和setter,我会将其更改为:
public final class Persona {
private int codigo;
private String nombre;
public Persona(int codigo, String nombre) {
this.codigo = codigo;
this.nombre = nombre;
}
public void setCodigo(int codigo) {
this.codigo = codigo;
}
public int getCodigo() {
return codigo;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getNombre() {
return nombre;
}
}
主要变化是字段的大写,并使字段保密。就个人而言,我也不会使用“这个”。我不需要的地方。我在()和{之间也有一个空格。这些都是个人偏好,而不是其他任何东西。
最后,我创建了课程final
- 我相信“继承设计或禁止它” - 如果你做需要从这个课程中派生,请考虑你想要支持什么样的专业化。
答案 1 :(得分:1)
你做得对。不幸的是,Java没有像许多其他语言那样更紧凑的方式来定义getter和setter。
要考虑的一件事 - 如果您只打算在对象构造上设置这些值,则无需使用setter。而且,如果您从未计划直接获取值,请不要定义getter。只需在需要时定义它们。
这里有一篇发人深省的文章(如果有点极端):Why getter and setter methods are evil。
答案 2 :(得分:1)
这是正确的在Java中做什么(除了那些变量通常以小写开头)。你也可以使用groovy自动生成getter / setters
class Persona {
int Codigo
String Nombre
}
这实际上是相同的
正如其他人所提到的,如果你不需要setter,你应该避免它们并使你的变量final
。不可变对象不太可能成为后来的bug来源。
答案 3 :(得分:1)
这对Java来说是正确的。请注意,由于您将两个值都传递给构造函数,因此可以删除setter,将字段标记为final,然后此类将为immutable。
答案 4 :(得分:0)
对我来说,这看起来像是优秀的二传手。但是,如果将两个值都传递给构造函数,您确定需要两个setter / getter吗?在这种情况下,看起来只有吸气剂就足够了。此外,如果您决定坚持将Codigo
和Nombre
传递给构造函数,并删除setter类,则应将它们设为final
,即不可变。
另一点是不要大写Codigo
和Nombre
,codigo
和nombre
是推荐的形式。方法和字段的Camel-case,仅限于类,接口和常量。
答案 5 :(得分:0)
是的,看起来确实很好。虽然您不应该将变量名称大写。
答案 6 :(得分:0)
您可能希望将成员变量Nombre和Cordigo设为“私有”。因为,这是使用getter / setter的重点。
了解你使用getter / setter的原因更为重要 一个好处是,您可以在这些方法中添加其他检查(如限制,如果它是一个数字)。此外,如果您的实施将来发生变化,它们也更容易维护。
答案 7 :(得分:0)
字段应该是私有的。原因是Encapsulation。您希望隐藏用户Persona类的任何其他类的实现详细信息。您可能有一天希望在codigo
上强制执行最小值和最大值,或者确保它在固定的值集中,您可以在setCodigo()
方法中执行该操作,而无需任何客户端代码了解它。只有公共领域,你无法拦截场的变异并影响它。
public final class Persona
{
private int codigo;
private String nombre;
public Persona(final int codigo, final String nombre)
{
this.codigo = codigo;
this.nombre = nombre;
}
public void setCodigo(final int codigo)
{
this.codigo = codigo;
}
public int getCodigo()
{
return this.codigo;
}
public void setNombre(final String nombre)
{
this.nombre = nombre;
}
public String getNombre()
{
return this.nombre;
}
}
我也为你修好了大括号:-)
对所有实例变量使用this.
也是很好的编码实践。明确比隐含更好。
答案 8 :(得分:0)
您的变量不是private
,它们是默认值。所以他们在同一个package
的课堂上公开。您可能想要制作它们private
。虽然几乎总是需要getter
,但并不总是需要设置器。
答案 9 :(得分:0)
public final class Persona {
private final int codigo;
private final String nombre;
public Persona(int codigo, String nombre) {
this.codigo = codigo;
this.nombre = nombre;
}
public int getCodigo() {
return codigo;
}
public String getNombre() {
return nombre;
}
}