有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java8Inner类实例化

为什么这段代码不编译。我正在学习用Java做谓词。这是密码

package com.java8.lambda.predicate;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;

import com.java8.lambda.pojo.Employee;

public class PredicateSample {
    public static void main(String[] args) {
        Employee permanentEmployee = new Employee(70, "Jagmohan", "Sanyal", new Date(), 'M', 19900.87,"P");
        Employee tempEmployee = new Employee(70, "Shruti", "Bhatia", new Date(), 'F', 1990.87,"C");

        List<Employee> empList = new ArrayList<>();
        empList.add(permanentEmployee);
        empList.add(tempEmployee);

        PredicateSample predicateSample = new PredicateSample();
        //Code doesn't compile on this line due to non-visibility of EmployeePredicate class
        //It fails with "PredicateSample.EmployeePredicate cannot be resolved to a type"
        EmployeePredicate empPredicate = new PredicateSample().new EmployeePredicate();
    }

}

class EmployeePredicate {

    public Predicate<Employee> getOlderEmployee(){
        return p -> p.getAge() > 60  && p.getEmploymentType().equalsIgnoreCase("P");
    }

    public List<Employee> filter(List<Employee> employees, Predicate<Employee> p){
        return employees.stream().filter(p).collect(Collectors.toList());
    }
}

我已经浏览了以下链接Inner Class Instantiation

我也访问了其他网站,但没有找到问题所在


共 (1) 个答案

  1. # 1 楼答案

    您需要内部类实际成为内部类

    public class PredicateSample {
        public static void main(String[] args) {
            Employee permanentEmployee = new Employee(70, "Jagmohan", "Sanyal", new Date(), 'M', 19900.87,"P");
            Employee tempEmployee = new Employee(70, "Shruti", "Bhatia", new Date(), 'F', 1990.87,"C");
    
            List<Employee> empList = new ArrayList<>();
            empList.add(permanentEmployee);
            empList.add(tempEmployee);
    
            PredicateSample predicateSample = new PredicateSample();
            //Code doesn't compile on this line due to non-visibility of EmployeePredicate class
            //It fails with "PredicateSample.EmployeePredicate cannot be resolved to a type"
            EmployeePredicate empPredicate = new PredicateSample().new EmployeePredicate();
        }
    
        // **inner** class.
        class EmployeePredicate {
    
            public Predicate<Employee> getOlderEmployee(){
                return p -> p.getAge() > 60  && p.getEmploymentType().equalsIgnoreCase("P");
            }
    
            public List<Employee> filter(List<Employee> employees, Predicate<Employee> p){
                return employees.stream().filter(p).collect(Collectors.toList());
            }
        } // <  - end of **inner** class
    } // <  - end of **outer** class.