

メンバ変数からその変数が保存されているインスタンスを特定したいです。例えば以下のようなインスタンスを作ったとしてStudentID
1からインスタンス名のsample1又はSample1の他のメンバ変数を特定することはできますか？

[code]

    class Student{
        int studentID;
        String name ;
        int age ;
    }
    Student sample1 = new Student(1,“太郎”,14);
    
[/code]


CC BY-SA 4.0
2022-10-22T19:11:04.607
91745
2022-10-23T00:52:16.670
2022-10-23T00:41:46.087
9515
54976
question
java
メンバ変数からのインスタンス特定について


> Sample1の他のメンバ変数を特定することはできますか？

HashMapでStudentのインスタンスを管理すればいいのではないでしょうか。

[Java |
HashMapの使い方](https://www.javadrive.jp/start/collection/index3.html#section6)

HashMapのキーをStudentID、値をStudentのインスタンスにすれば、getメソッドでStudentIDからインスタンスを参照できます。当然ですが、Studentクラスでメンバ変数のgetterを実装しておく必要があります。


CC BY-SA 4.0
2022-10-22T21:09:33.777
91746
2022-10-22T21:46:15.037
2022-10-22T21:46:15.037
4982
4982
91745
answer


HashMapでStudentのインスタンスを管理をお勧めします。

こんなのはどうでしょうか。

コンストラクタをprivate にしてfactoryメソッドでのみインスタンスを作成できるようにする。  
factoryメソッドで、インスタンスを管理するようにする。  
インスタンス情報を知りたければ、getStudentメソッドを利用する。

[code]

    public class Student {
        Integer studentId;
        String name ;
        int age ;
    
        private static Map<Integer, Student> studentMap = new HashMap<>();
        private Student(Integer studentId, String name, int age) {
            this.studentId = studentId;
            this.name = name;
            this.age = age;
        }
    
        public static Student factory(Integer studentId, String name, int age) {
            Student student = new Student(studentId, name, age);
            studentMap.put(studentId, student);
            return student;
        }
        public static Student getStudent(Integer studentId) throws Exception {
            if (studentMap.containsKey(studentId)) {
                return studentMap.get(studentId);
            }
            throw new Exception("インスタンスはありません。");
        }
    
    }
    
[/code]


CC BY-SA 4.0
2022-10-23T00:51:25.780
91749
2022-10-23T00:52:16.670
2022-10-23T00:52:16.670
54974
54974
91745
answer