Добрый день. Есть интерфейс, например
public interface MyInterface {
MyClassTestInt update (Long id, String user, Long groupId);
}
Есть некий класс
public class MyClassTestInt implements Serializable {
private Long id = 3L;
private String name;
public MyClassTestInt(MyClassTestInt buf) {
if (buf != null) {
this.id = buf.getId();
this.name = buf.name;
}
}
public MyClassTestInt() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
И есть вот такой класс
public class NyRelClass {
MyInterface myInterface;
public void up(Long id, String name, Long groupId) {
MyClassTestInt myClassTestInt = myInterface.update(id, name, groupId);
}
}
Я вот никак не пойму, вот эту строку
MyClassTestInt myClassTestInt = myInterface.update(id, name, groupId);
Каким образом мы получим объект myClassTestInt
, вызвав метод у интерфейса?
Я так понимаю его же где-то реализовать надо, и переопределить методы его, но тут, как он создает объект?
Автор упустил в вопросе самое главное: что это Spring
и что поле класса аннотировано как @Autowired
.
Что собственно говорит Spring-у: вставь сюда подходящую имплементацию интерфейса.
Это называется Dependency Injection (DI), когда зависимые объекты подставляются в другой объект без явной их инициализации в коде.
Допустим у нас есть интерфейс:
interface MyInterface {
void method();
}
Чтобы начать им пользоваться нам потребуется его реализация. Есть несколько способов это сделать:
Обычный класс:
class MyClass implements MyInterface {
public void method(){
System.out.println("Hello world");
}
}
Анонимный класс:
MyInterface instance = new MyInterface(){
public void method(){
System.out.println("Hello world");
}
}
В виде лямбды функции. Для этого нужно чтобы интерфейс был функциональным, т.е содержал бы один метод. В данном примере, он таковым и является.
MyInterface instance = ()-> System.out.println("Hello world");
Есть еще вариант, без явного создания экземпляра данного класса, с использованием прокси:
MyInterface instance = (MyInterface) Proxy.newProxyInstance(
ClassLoader.getSystemClassLoader(), new Class<?>[]{MyInterface.class},
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("hello world");
return null;
}
});
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Суть проблемы такова: имеется polygonRegion в котором содержится данная текстура (рис1)