1

私は次の質問のコードを書こうとしています: WAP to get empno,DOB and 少数の従業員の給料. 2 つの匿名内部クラスを作成します。1 つは従業員を生年月日に従って並べ替えるインターフェイスを実装し、もう 1 つはクラスを拡張して従業員を給与に従って並べ替える匿名内部クラスです。私のコードは次のとおりです。

 //required import statements

public class OuterClass {
    private int empno;
    private String DOB;
    private int salary;

    public OuterClass() {
        // TODO Auto-generated constructor stub
    }

    public OuterClass(int empn, String dob, int sal) {
        //code for paramaterized constructor
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        List<OuterClass> list = new ArrayList<OuterClass>();
        while (true) {
            //code for input from user and adding it in list
        }   
    }

    Employee abc = new Employee() {
        @Override
        void SalarySort(List<OuterClass> l) {
            Collections.sort(l, new Comparator<OuterClass>() {
                public int compare(OuterClass e1, OuterClass e2) {
                    return e1.salary - e2.salary;
                }
            });
            Iterator<OuterClass> itr = l.iterator();
            while (itr.hasNext()) {
                OuterClass employee = (OuterClass) itr.next();
                System.out.println("Emp no : " + employee.empno + " Emp dob : "
                        + employee.DOB + " Emp Salary : " + employee.salary);
            }
        }

    }.SalarySort(list);// compile error : create local field list

}

class Employee {
    void SalarySort(List<OuterClass> l) {

    }
}

私の質問は、匿名クラスの Employee のメソッド SalarySort を呼び出すことができません。問題を解決するにはどうすればよいですか?

4

2 に答える 2

1

これはどう ?インターフェイスを実装し、クラスを拡張する匿名内部クラスを使用します。

import java.util.Arrays;
import java.util.Comparator;

public class AnonymousInner
{
int empNo;
double salary;
MyDate dateOfBirth;
public AnonymousInner(int empNo, double salary, MyDate dateOfBirth)
{
    this.empNo = empNo;
    this.salary = salary;
    this.dateOfBirth = dateOfBirth;
}

@Override
public String toString()
{
    return "\nEmployee = " + empNo + " Salary= " + salary + " DOB= " + dateOfBirth;
}
public static void main(String[] args)
{
    AnonymousInner[] a =
    {new AnonymousInner(1, 5000, new MyDate(15, 0, 1994)), new AnonymousInner(2, 4000,
            new MyDate(15, 1, 1993)), new AnonymousInner(3, 5000, new MyDate(15, 0, 1995)),
            new AnonymousInner(4, 6000, new MyDate(16, 0, 1994)), new AnonymousInner(5, 9000,
                    new MyDate(15, 1, 1994))};

    Arrays.sort(a, new Comparator<AnonymousInner>()  //This creates anonymous class that implements an interface
    {

        @Override
        public int compare(AnonymousInner o1, AnonymousInner o2)
        {

            return ((Double) o1.salary).compareTo(o2.salary);
        }
    });
    System.out.println("Sorting on Salary");
    for (AnonymousInner s : a)
    {
        System.out.println(s);
    }

    a = new sortDOB()
    {
    }.sort(a);  //this creates Anonymous class that extends a class

    System.out.println("\nSorting on DOB\n");
    for (AnonymousInner s : a)
    {
        System.out.println(s);
    }

}

}

class sortDOB
{

public AnonymousInner[] sort(AnonymousInner[] x)
{
    int size = x.length;
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size - 1; j++)
        {
            int k = j + 1;
            int compare = (x[j].dateOfBirth).compareTo(x[k].dateOfBirth);
            if (compare == 1)
            {
                AnonymousInner temp = x[j];
                x[j] = x[k];
                x[k] = temp;

            }
        }
    }
    return x;
}
}

class MyDate implements Comparable<MyDate>
{
int year, month, day;
public MyDate(int day, int month, int year)
{
    this.year = year;
    this.month = month;
    this.day = day;
}

public MyDate()
{
}

@Override
public String toString()
{
    return day + "/" + month + "/" + year;
}

@Override
public int compareTo(MyDate o2)
{
    if (year == o2.year)
    {
        if (month == o2.month)
        {
            if (day == o2.day)
            {
                return 0;
            }
            else if (day < o2.day)
            {
                return -1;
            }
            else
            {
                return 1;
            }

        }
        else if (month < o2.month)
        {
            return -1;
        }
        else
        {
            return 1;
        }
    }
    else if (year < o2.year)
    {
        return 1;
    }
    else
    {
        return -1;
    }

}
}
于 2015-07-14T18:48:54.703 に答える