【问题标题】:How to create multiple getters in java with different return values? [duplicate]java - 如何在java中创建具有不同返回值的多个getter? [复制]
【发布时间】:2016-05-27 17:47:24
【问题描述】:

来自 php 世界的虚拟问题。在php中我会简单地做:

class myClass {
   private $value; //can be anything. int, String, boolean, float

   public function getValue() {
      return $this->value;
   }
}

假设我现在必须用 Java 编程,但我失败了:

public class myClass {
   private int myInt;
   private boolean myBoolean;

   public int getValue() { return this.myInt; }
   public boolean getValue() { return this.myBoolean }
}

除了getMyInt()getMyBoolean() 之类的命名方法之外,还有其他解决方法吗?

是的,我知道,Java 是强类型语言,我将永远知道返回值。

【问题讨论】:

  • 你需要它做什么?
  • 在java中对象可以是任何东西。在你的脑海里有类似的东西吗?使用时您仍然需要转换...或者您可能想要泛型...用例是什么?
  • 你不能只在返回类型上重载一个函数。
  • @chepner,你的 IDE 也这么跟我说。这就是我要求解决的原因。
  • 我不同意这是完全重复的。有诸如 public <T> T getValue(Class<T> cls) { ... 之类的机制将近似于 OP 的要求。我可以取消重锤,但会等着看其他人是否同意它值得重新开放。

标签: java


【解决方案1】:

在 Java 中这将是一个不好的做法,尽管您可以执行以下操作

class MyClass{
    private Object genericTypeObj;
    public void setObject(Object o){
        this.genericTypeObj = o;
    }
    public Object getObject(){
        return this.genericTypeObj;
    }
}

在上述方法中,类型安全受到了损害,您也可以尝试使用泛型来克服不良影响。

class MyClass<E>{
    private E genericTypeObj;
    public void setObject(E o){
        this.genericTypeObj = o;
    }
    public E getObject(){
        return this.genericTypeObj;
    }
}

【讨论】:

    【解决方案2】:

    在 Java 世界中,我们通常遵循 JavaBean 格式来定义 getter 和 setter。 https://en.wikipedia.org/wiki/JavaBeans

    在你的示例类中,你会为 getter 和 setter 提供类似的东西:

    public class myClass {
        private int myInt;
        private boolean myBoolean;
    
        public int getMyInt() { return this.myInt; }
        public void setMyInt(int i) { this.myInt = i; }
        public boolean getMyBoolean() { return this.myBoolean; }
        public void setMyBoolean(boolean b) { this.myBoolean = b; }
    }
    

    【讨论】:

    • 这里提出的问题是如何拥有一个可以分配任何类型值的引用以及如何拥有这个通用引用的getter。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2012-01-24
    • 2023-03-13
    • 2019-09-15
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多