使用getter和setter的优点是什么 - 只能获取和设置 - 而不是简单地使用公共字段来存储这些变量?
如果getter和setter做的不仅仅是简单的get/set,我可以非常快地解决这个问题,但我并不是100%清楚如何:
public String foo;
Run Code Online (Sandbox Code Playgroud)
更糟糕的是:
private String foo;
public void setFoo(String foo) { this.foo = foo; }
public String getFoo() { return foo; }
Run Code Online (Sandbox Code Playgroud)
而前者需要很少的样板代码.
阅读文档后String java.lang.Enum.name()我不确定我何时使用name()以及何时使用toString().
返回此枚举常量的名称,与其枚举声明中声明的完全相同.大多数程序员应优先使用toString方法,因为toString方法可能会返回一个更加用户友好的名称.此方法主要用于特殊情况,其中正确性取决于获取确切名称,该名称在不同版本之间不会有所不同.
特别是,即使文档说更喜欢toString(),Java自己的StandardLocation枚举name也会在我认为文档建议不同时使用.
public String getName() { return name(); }
Run Code Online (Sandbox Code Playgroud)
另外Enum实现toString()为,
public String toString() {
return name;
}
Run Code Online (Sandbox Code Playgroud)
我无法想到用户定义的枚举会覆盖的toString()情况name(),toString()并且几乎总是完全相同.
name()是一个坏主意?java.lang.Enum.toString()会这样?对于这个枚举,
Enum MyEnum
Value
End Enum
Run Code Online (Sandbox Code Playgroud)
有两种方法来获取名字表示Value的MyEnum.Value:
[Enum].GetName(GetType(MyEnum), MyEnum.Value) ' aka Enum.GetName
Run Code Online (Sandbox Code Playgroud)
和
Dim a As MyEnum = MyEnum.Value
a.ToString ' aka Enum.ToString
Run Code Online (Sandbox Code Playgroud)
它们的优缺点是什么?毕竟哪个更好?
PS: Java有一个答案,但这是 .NET,它可能具有不同的功能。
我在A类中定义了一个枚举
public class A{
public static final String CANDY = "yelow candy";
public static final String CAKE = "cookie";
public enum Yummy{
CANDY, CAKE;
}
}
Run Code Online (Sandbox Code Playgroud)
在另一个包中,
public class C {
Yummy[] yummies = A.Yummy.values();
for (Yummy yum : yummies){
String yumString = yum.toString();
System.out.println("yum =" + yumString);
}
Run Code Online (Sandbox Code Playgroud)
}
我得到了CANDY和CAKE,而不是"yelow candy"和"cookie".我需要改变什么来获得"黄色糖果"和"饼干?
我在Airport.java有一个Enum类
package test;
public enum Airport {
PHX,
LAX,
SFO,
NRT,
SIN;
Airport() {
}
}
Run Code Online (Sandbox Code Playgroud)
和Test.java中的Test类
package test;
public class Test {
public static void main(String[] args) {
Airport a = Airport.PHX;
System.out.println(a);
System.out.println(String.valueOf(a));
System.out.println(a.name());
System.out.println(a.toString());
System.out.println(a.name() + '@' + Integer.toHexString(a.hashCode()));
}
}
Run Code Online (Sandbox Code Playgroud)
这个输出是
PHX
PHX
PHX
PHX
PHX@15db9742
Run Code Online (Sandbox Code Playgroud)
但输出不应该
PHX
PHX
PHX
PHX@15db9742
PHX@15db9742
Run Code Online (Sandbox Code Playgroud)
根据Object API https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html,默认Object.toString()为getClass().getName() + '@' + Integer.toHexString(hashCode())