通用警告 - 没有封闭的类型实例

时间:2013-12-21 13:06:07

标签: java generics

我正在遇到以下警告而不知道如何处理它。 正如您所看到的,我有一个[Course]类,具有通用属性[idOrName]。 当我尝试创建inseretion方法时,我得到以下几点:

No enclosing instance of type PR3 is accessible. Must qualify the 
allocation with an enclosing instance of type PR3 (e.g. x.new A() 
where x is an instance of PR3).

其中PR3是班级名称。

以下是代码,警告位于 set.add(新课程(名称,平均));

 private static void insertCoursesToSet(Set<Course> set, int n, int it) {
        Scanner s = new Scanner(System.in);

        if(it==1) 
            for(int i=0 ; i<n ; i++){
                System.out.println("Please enter name:");
                s.nextLine(); //clear buffer
                String name = s.nextLine();
                System.out.println("Please enter avg:");
                float avg = s.nextFloat();
                set.add(new Course<String>(name,avg));
            }
        else
            for(int i=0 ; i<n ; i++){
                System.out.println("Please enter id:");
                Integer id = s.nextInt();
                System.out.println("Please enter avg:");
                float avg = s.nextFloat();
                set.add(new Course<Integer>(id,avg));
            }
    }

    public class Course<E>{
        private E idOrName;
        private float avg;

        public Course(E idOrName, float avg){
            this.idOrName = idOrName;
            this.avg = avg;
        }
    }

1 个答案:

答案 0 :(得分:2)

之所以发生这种情况,是因为您在[{1}}中创建了内部类Course,而PR3方法是insertCoursesToSet

如果您有兴趣将其作为内部类,请将其设为static

static

public static class Course<E>{ private E idOrName; private float avg; public Course(E idOrName, float avg){ this.idOrName = idOrName; this.avg = avg; } } 非静态,你可以写:

insertCoursesToSet