И я не могу изменить объект. Я не могу поставить новые методы на это.
Как мне это сделать?
Если вы также имеете в виду, как сделать объект неизменным и предотвратить создание подклассов: используйте ключевое слово final
public final class Blog { //final classes can't be extended/subclassed
private final String title; //final members have to be set in the constructor and can't be changed
private final String author;
private final String url;
private final String description;
...
}
Редактировать: Я только что видел некоторые ваши комментарии, и кажется, что вы хотите изменить класс, но не можете (сторонняя организация, я полагаю).
Для предотвращения дублирования вы можете использовать оболочку, которая реализует соответствующие equals()
и hashCode()
, а затем использовать подход Set
, упомянутый другими:
class BlogWrapper {
private Blog blog; //set via constructor etc.
public int hashCode() {
int hashCode = blog.getTitle().hashCode(); //check for null etc.
//add the other hash codes as well
return hashCode;
}
public boolean equals(Object other) {
//check if both are BlogWrappers
//remember to check for null too!
Blog otherBlog = ((BlogWrapper)other).getBlog();
if( !blog.getTitle().equals(otherBlog.getTitle()) {
return false;
}
... //check other fields as well
return true
}
}
Обратите внимание, что это всего лишь грубая и простая версия, которая не содержит обязательных нулевых проверок.
Наконец, используйте Set<BlogWrapper>
, переберите все блоги и попробуйте добавить new BlogWrapper(blog)
в набор. В конце у вас должны быть только уникальные (завернутые) блоги в наборе.