【问题标题】:JAVA constructor not accepting enum values [duplicate]JAVA构造函数不接受枚举值[重复]
【发布时间】:2021-05-30 06:09:29
【问题描述】:

尝试使用此代码学习函数式 Java,但我的 Person 构造函数不接受枚举值,给出编译错误,并且没有采用命名参数导致语法错误。请指出我正在犯的错误。

 package imperative;

import java.util.List;

public class Main {
    private static String name;
    public static void main(String[] args) {
        List<Person> people = List.of(
                    new Person(name:"John",MALE),
                    new Person(name:"Alexa",FEMALE),
                    new Person(name:"Sam",MALE),
                    new Person(name:"Maria",FEMALE),
                    new Person(name:"Drake",MALE)
                );
    }
    class Person{
        private final String name;
        private final Gender gender;
        public Person(String name, Gender gender) {
            super();
            this.name = name;
            this.gender = gender;
        }
        @Override
        public String toString() {
            return "Person [name=" + name + ", gender=" + gender + "]";
        }
    }
        enum Gender{
            MALE,FEMALE
        }
    
}

【问题讨论】:

标签: java oop enums


【解决方案1】:

以下代码编译:

package imperative;

import java.util.List;

public class Main {
    private static String name;
    public static void main(String[] args) {
        List<Person> people = List.of(
                    new Person("John",Gender.MALE),
                    new Person("Alexa",Gender.FEMALE),
                    new Person("Sam",Gender.MALE),
                    new Person("Maria",Gender.FEMALE),
                    new Person("Drake",Gender.MALE)
                );
    }
    static class Person{
        private final String name;
        private final Gender gender;
        public Person(String name, Gender gender) {
            super();
            this.name = name;
            this.gender = gender;
        }
        @Override
        public String toString() {
            return "Person [name=" + name + ", gender=" + gender + "]";
        }
    }
        enum Gender{
            MALE,FEMALE
        }
    
}

必须完全限定 MALE 和 FEMALE 并将名称作为字符串传递:不需要使用语法

name: "John"

【讨论】:

  • 是的,但仍然想知道为什么“名称:”不起作用
  • 您的构造函数接受一个字符串和一个 Gender 实例作为输入。语法名称:“John”在 Java 中无效。
  • 这不会编译。 Person 类应声明为 static
  • @Marco 实际上在视频教程中发现了这种语法
  • @SamratDas,很有趣。这可能是一种新语法,我不知道。让我看看。
【解决方案2】:

首先,将您的类 Person 设为静态,因为您在静态方法中使用它:

static class Person {

然后使用限定的枚举值,例如 Gender.MALEGender.FEMALE。 最后调用构造函数如下:

public static void main(String[] args) {
    List<Person> people = List.of(
            new Person("John", Gender.MALE),
            new Person("Alexa", Gender.FEMALE),
            new Person("Sam", Gender.MALE),
            new Person("Maria", Gender.FEMALE),
            new Person("Drake", Gender.MALE)
    );
}

【讨论】:

  • 枚举问题已解决,但仍面临“:”无效运算符错误。您能帮忙吗?
  • @SamratDas 您是否尝试运行我的代码?我也删除了name: 部分。
猜你喜欢
  • 2011-08-20
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多