Самый простой способ сделать это - зарегистрировать все экземпляры Student
при их создании:
class Student {
private static final Map<String, Student> registry = new HashMap<>();
Student() {
registry.put(this.toString(), this);
}
static Student fromString(String address) {
return registry.get(address);
}
}
Тогда вы можете получить экземпляр в вашем методе, используя Student.fromString(address)
.
Но есть много причин, чтобы этого не делать:
- Это приводит к утечке памяти, потому что экземпляры Student никогда не могут быть GC'd, поскольку они доступны через реестр.
- Небезопасно публикует экземпляр
- Это означает, что вы не можете изменить значение
toString()
после конструктора, если вы хотите предоставить пользовательскую реализацию позже
- Это изменчивое глобальное состояние, которое никогда не бывает хорошей идеей
- Как следствие предыдущего пункта, трудно проверить
- Хеш-коды не являются уникальными, поэтому несколько экземпляров
Student
могут иметь одну и ту же строку; в таком случае реализация здесь будет возвращать последний созданный экземпляр с заданной строкой.
как несколько, чтобы вы начали.
Короче, было бы нецелесообразно это делать.
Существуют альтернативные способы реализации реестра, позволяющие избежать некоторых или всех этих проблем, но это будет изобретением колеса.
Вам не нужно ссылаться на экземпляры по строке: ссылаться на них, используя ссылки.