Я покажу упрощенный код из своего проекта. У меня тут просто батхерт с него...
MyModel.java
package com.company;
public class MyModel {
public String myField;
}
MyView.java
package com.company;
public class MyView {
public String myField;
}
MyMapper.java
package com.company;
public class MyMapper {
public static MyView map(MyModel model) {
return new MyView() {{
myField = model.myField;
}};
}
public static MyModel map(MyView view) {
return new MyModel() {{
myField = view.myField;
}};
}
}
Main.java
package com.company;
import static com.company.MyMapper.*;
public class Main {
public static void main(String[] args) {
MyView view = new MyView() {{
myField = "Hello world!";
}};
myMethod(map(view));
}
public static void myMethod(MyModel model) {
System.out.println(model.getClass().getName()); // com.company.MyMapper$2
}
}
Код проще некуда. Но, внимание вывод приложения: "com.company.MyMapper$2". Что черт побери происходит??? Какого черта у меня модель в методе явно объявленная типом MyModel внезапно оказывается типа MyMapper? Что за магия?