Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java8Inner类实例化_Java_Java 8_Inner Classes - Fatal编程技术网

Java8Inner类实例化

Java8Inner类实例化,java,java-8,inner-classes,Java,Java 8,Inner Classes,为什么这段代码不编译。我正在学习用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.Employ

为什么这段代码不编译。我正在学习用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());
    }
}
包com.java8.lambda.predicate;
导入java.util.ArrayList;
导入java.util.Date;
导入java.util.List;
导入java.util.function.Predicate;
导入java.util.stream.collector;
导入com.java8.lambda.pojo.Employee;
公共类谓词示例{
公共静态void main(字符串[]args){
员工永久雇员=新员工(70,“Jagmohan”,“Sanyal”,新日期(),'M',19900.87,“P”);
雇员临时雇员=新雇员(70,“Shurti”,“Bhatia”,新日期(),'F',1990.87,“C”);
List empList=new ArrayList();
雇员。添加(永久雇员);
empList.add(临时雇员);
谓词示例谓词示例=新谓词示例();
//由于EmployeePredicate类不可见,代码无法在此行上编译
//它因“PredicateSample.EmployeePredicate无法解析为类型”而失败
EmployeePredicate empPredicate=新谓词示例()。新EmployeePredicate();
}
}
类雇员预测{
公共谓词getOlderEmployee(){
返回p->p.getAge()>60&&p.getEmploymentType().equalsIgnoreCase(“p”);
}
公共列表筛选器(列表员工,谓词p){
return employees.stream().filter(p.collect)(Collectors.toList());
}
}
我已经浏览了以下链接


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

你需要内部类成为一个内部类

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.
公共类谓词示例{
公共静态void main(字符串[]args){
员工永久雇员=新员工(70,“Jagmohan”,“Sanyal”,新日期(),'M',19900.87,“P”);
雇员临时雇员=新雇员(70,“Shurti”,“Bhatia”,新日期(),'F',1990.87,“C”);
List empList=new ArrayList();
雇员。添加(永久雇员);
empList.add(临时雇员);
谓词示例谓词示例=新谓词示例();
//由于EmployeePredicate类不可见,代码无法在此行上编译
//它因“PredicateSample.EmployeePredicate无法解析为类型”而失败
EmployeePredicate empPredicate=新谓词示例()。新EmployeePredicate();
}
//**内部**类。
类雇员预测{
公共谓词getOlderEmployee(){
返回p->p.getAge()>60&&p.getEmploymentType().equalsIgnoreCase(“p”);
}
公共列表筛选器(列表员工,谓词p){
return employees.stream().filter(p.collect)(Collectors.toList());
}
}//<---结束**内部**类
}//<---结束**外部**类。

EmployeePredicate
不是
谓词示例的内部类