相关疑难解决方法(0)

为什么要使用getter和setter/accessors?

使用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)

而前者需要很少的样板代码.

java oop getter setter abstraction

1472
推荐指数
26
解决办法
37万
查看次数

`Enum.name()`和`Enum.toString()`有什么区别?

阅读文档后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()并且几乎总是完全相同.

  1. 你能解释为什么忽略文档并总是使用name()是一个坏主意?
  2. "从发布到发布不会有所不同"这句话怎么样?如果名称不会改变,它是否暗示java.lang.Enum.toString()会这样?

java enums

107
推荐指数
3
解决办法
11万
查看次数

Enum.GetName 与 Enum.ToString

对于这个枚举,

Enum MyEnum
    Value
End Enum
Run Code Online (Sandbox Code Playgroud)

有两种方法来获取名字表示ValueMyEnum.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,它可能具有不同的功能。

.net vb.net enums tostring

5
推荐指数
1
解决办法
2216
查看次数

枚举不提供预期的结果

我在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".我需要改变什么来获得"黄色糖果"和"饼干?

java enums

0
推荐指数
1
解决办法
80
查看次数

默认的Object.toString()不附加hashCode()吗?

我在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())

java enums tostring hashcode

-1
推荐指数
1
解决办法
85
查看次数

标签 统计

enums ×4

java ×4

tostring ×2

.net ×1

abstraction ×1

getter ×1

hashcode ×1

oop ×1

setter ×1

vb.net ×1