Оператор new
всегда дает одну и ту же ссылку, то есть он не создает разные объекты, а просто возвращает ту же ссылку на уже существующий объект.
Я использую Java11.
У меня есть этот (упрощенный) интерфейс и класс:
public interface MyInterface {
MyInterface newObject();
}
public class MyClass extends HashSet<Integer> implements MyInterface {
@Override
public MyClass newObject(){
return new MyClass();
}
}
, а затем в другом месте кода, где obj
имеет тип MyClass
:
HashSet<MyClass> set = new HashSet<MyClass>();
for(int i=0;i<10;i++) {
MyClass t = (MyClass) ((MyInterface)obj).newObject();
if(set.containsKey(t)) {
System.out.println("error: "+i);
System.exit(-1);
}
set.add(t);
}
Всегда выдает ошибку при i==1
, т. Е. Та же ссылка снова генерируется оператором new
.
Если я удаляю extends HashSet<Integer>
, тогда он работает нормально, безошибка, т.е. он создает 10 уникальных объектов.
Я что-то здесь упускаю?Это ожидаемое поведение?