【问题标题】:Java enum placement in Interface or Class接口或类中的 Java 枚举放置
【发布时间】:2017-06-02 04:17:19
【问题描述】:

我正在尝试理解 Java 中的枚举,但目前找不到解释我所问问题的帖子。

我有一个Person 接口和一个PersonEO 类。 Person 接口的两个方法是 setGender 和 getGender。我想将性别作为枚举。

我是在接口中创建枚举并将其传递给类还是在类中创建枚举?

这是我目前一直在尝试的,但无法让枚举正确传递给类,并且不真正理解它将如何在程序中流动。

public interface Person{
    public enum gender{
    Female,
    Male,
    Unknown;

       private String gender;

       public String getGender(){
       }

       void setGender(){  
       }
}


------------------------------------------------------


public class PersonEO implements Person {
   //Both override methods are not seen as methods from the interface

   @Override
   public String getGender() {
       return gender;
   }

   @Override
   public void setGender() {
       //Not sure how to set the gender from the enum
       this.gender = gender;
   }
}

请举个例子。

【问题讨论】:

  • 创建一个成员变量 Gender 并在你的 setter 和 getter 中使用它。
  • 一般来说,您的枚举类型中不会有设置器。
  • Person.gender(应该是Gender)的代码中声明了一个空方法setGender。该命名约定意味着缺少方法参数来传递值来设置。目前尚不清楚gender (Gender) 中的setGender 方法打算做什么,但无论它应该设置什么,在枚举中都很少看到setter。确切地说,这并没有错,只是出于枚举常量的目的而有些不合时宜。它们不应该正常保持状态,因为在许多情况下都会使用相同的常量。此外,Person 缺少右花括号。

标签: java class enums interface


【解决方案1】:

枚举、接口和类都是独立的类型,通常应该在不同的文件中。以下是一些示例定义:

enum Gender {
    MALE, FEMALE, UNKNOWN;
}

interface Person {
    void setGender(Gender gender);
    Gender getGender();
}

class PersonImpl implements Person {
    private Gender gender;

    @Override
    public void setGender(Gender gender) {
        this.gender = gender;
    }

    @Override
    public Gender getGender() {
        return this.gender;
    }
}

【讨论】:

  • 我在枚举中没有设置器。你是说界面吗?
  • 啊,我现在明白了!谢谢你。我认为枚举是一个变量,而不是更多的分类器/分段类型。
  • 我指的是问题中的代码,而不是答案中的代码。我的错误,现在更正了。
猜你喜欢
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-13
相关资源
最近更新 更多