QA@IT
«質問へ戻る

質問を投稿

javaでの質問です。

下記のEmployeeManagerクラスとUnitManagerクラスなのですが処理が似ています。
今後も同じようなメソッドを両方のクラスに追加していくのは面倒だと思いましたので、
スーパークラスを定義して(仮にManagerクラスとして)処理を共通化しようと試みたのですが、
型が異なるせいか私には定義できませんでした。(コメントアウト部分)

※java(静的型付け)初心者ですので検討違いなことを質問しているかもしれませんがお許し下さい。。
皆さんならどの様に処理を共通化されますか。

import java.util.ArrayList;

public class www {
    public static void main(String args[]) {
        int[] empPk = { 0, 1, 2 };
        String[] empName = { "山田", "佐藤", "石元" };
        int[] empFk = { 0, 1, 0 };

        int[] uniPk = { 0, 1 };
        String[] uniName = { "営業", "人事" };

        EmployeeManager empCreater = new EmployeeManager(empPk, empName, empFk);
        UnitManager uniCreater = new UnitManager(uniPk, uniName);
        System.out.println("名前:" + empCreater.get(0).getName());
        System.out.println("部署:" + uniCreater.get(empCreater.get(0).getFk()).getName());

    }
}

class EmployeeManager {
    private ArrayList<Employee> objs = new ArrayList<Employee>();

    public EmployeeManager(int[] pk, String[] name, int[] fk) {
        for (int i : pk) {
            objs.add(new Employee(i, name[i], fk[i]));
        }
    }

    public Employee get(int pk) {
        for (Employee obj : objs) {
            if (obj.getPk() == pk) {
                return obj;
            }
        }
        return null;
    }
}

class UnitManager {
    private ArrayList<Unit> objs = new ArrayList<Unit>();

    public UnitManager(int[] pk, String[] name) {
        for (int i : pk) {
            objs.add(new Unit(i, name[i]));
        }
    }

    public Unit get(int pk) {
        for (Unit obj : objs) {
            if (obj.getPk() == pk) {
                return obj;
            }
        }
        return null;
    }
}

/*
class Manager<T> {
    protected ArrayList<T> objs = new ArrayList<T>();

    protected T get(int pk) {
        for (T obj : objs) {
            if (obj.getPk() == pk) {
                return obj;
            }
        }
        return null;
    }
}

class EmployeeManager extends Manager<Employee> {

    public EmployeeManager(int[] pk, String[] name, int[] fk) {
        for (int i : pk) {
            objs.add(new Employee(i, name[i], fk[i]));
        }
    }
}

class UnitManager extends Manager<Unit> {

    public UnitManager(int[] pk, String[] name) {
        for (int i : pk) {
            objs.add(new Unit(i, name[i]));
        }
    }
}
*/
class Employee {
    private int pk;
    private String name;
    private int fk;

    public Employee(int pk, String name, int fk) {
        this.pk = pk;
        this.name = name;
        this.fk = fk;
    }

    public int getFk() {
        return fk;
    }

    public int getPk() {
        return pk;
    }

    public String getName() {
        return name;
    }

}

class Unit {
    private int pk;
    private String name;

    public Unit(int pk, String name) {
        this.pk = pk;
        this.name = name;
    }

    public int getPk() {
        return pk;
    }

    public String getName() {
        return name;
    }

}
下記のEmployeeManagerクラスとUnitManagerクラスなのですが処理が似ています。
今後も同じようなメソッドを両方のクラスに追加していくのは面倒だと思いましたので、
スーパークラスを定義して(仮にManagerクラスとして)処理を共通化しようと試みたのですが、
型が異なるせいか私には定義できませんでした。(コメントアウト部分)

※java(静的型付け)初心者ですので検討違いなことを質問しているかもしれませんがお許し下さい。。
皆さんならどの様に処理を共通化されますか。
```
import java.util.ArrayList;

public class www {
	public static void main(String args[]) {
		int[] empPk = { 0, 1, 2 };
		String[] empName = { "山田", "佐藤", "石元" };
		int[] empFk = { 0, 1, 0 };

		int[] uniPk = { 0, 1 };
		String[] uniName = { "営業", "人事" };

		EmployeeManager empCreater = new EmployeeManager(empPk, empName, empFk);
		UnitManager uniCreater = new UnitManager(uniPk, uniName);
		System.out.println("名前:" + empCreater.get(0).getName());
		System.out.println("部署:" + uniCreater.get(empCreater.get(0).getFk()).getName());

	}
}

class EmployeeManager {
	private ArrayList<Employee> objs = new ArrayList<Employee>();

	public EmployeeManager(int[] pk, String[] name, int[] fk) {
		for (int i : pk) {
			objs.add(new Employee(i, name[i], fk[i]));
		}
	}

	public Employee get(int pk) {
		for (Employee obj : objs) {
			if (obj.getPk() == pk) {
				return obj;
			}
		}
		return null;
	}
}

class UnitManager {
	private ArrayList<Unit> objs = new ArrayList<Unit>();

	public UnitManager(int[] pk, String[] name) {
		for (int i : pk) {
			objs.add(new Unit(i, name[i]));
		}
	}

	public Unit get(int pk) {
		for (Unit obj : objs) {
			if (obj.getPk() == pk) {
				return obj;
			}
		}
		return null;
	}
}

/*
class Manager<T> {
	protected ArrayList<T> objs = new ArrayList<T>();

	protected T get(int pk) {
		for (T obj : objs) {
			if (obj.getPk() == pk) {
				return obj;
			}
		}
		return null;
	}
}

class EmployeeManager extends Manager<Employee> {

	public EmployeeManager(int[] pk, String[] name, int[] fk) {
		for (int i : pk) {
			objs.add(new Employee(i, name[i], fk[i]));
		}
	}
}

class UnitManager extends Manager<Unit> {

	public UnitManager(int[] pk, String[] name) {
		for (int i : pk) {
			objs.add(new Unit(i, name[i]));
		}
	}
}
*/
class Employee {
	private int pk;
	private String name;
	private int fk;

	public Employee(int pk, String name, int fk) {
		this.pk = pk;
		this.name = name;
		this.fk = fk;
	}

	public int getFk() {
		return fk;
	}

	public int getPk() {
		return pk;
	}

	public String getName() {
		return name;
	}

}

class Unit {
	private int pk;
	private String name;

	public Unit(int pk, String name) {
		this.pk = pk;
		this.name = name;
	}

	public int getPk() {
		return pk;
	}

	public String getName() {
		return name;
	}

}
```