0

Tried this code to learn functional Java but my Person constructor not accepting enum values, giving a compilation error and is not taking named parameters gving syntax error. Kindly poit to the error I am making.

 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
        }
    
}
VLAZ
  • 26,331
  • 9
  • 49
  • 67
Samrat Das
  • 57
  • 6
  • Does this answer your question? [How to pass an enum value to a constructor](https://stackoverflow.com/questions/20069410/how-to-pass-an-enum-value-to-a-constructor) – Dren Feb 28 '21 at 14:09

2 Answers2

2

First of all, make your class Person static, as you're using it in a static method:

static class Person {

Then use qualified enum values like Gender.MALE or Gender.FEMALE. Finally invoke the constructor as follows:

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)
    );
}

ETO
  • 6,970
  • 1
  • 20
  • 37
2

The following code compiles:

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
        }
    
}

It was necessary to fully qualify MALE and FEMALE and pass the name as a string: no need to use the syntax

name: "John"
Marco Altieri
  • 3,726
  • 2
  • 33
  • 47