@DarkByte2015

Что вообще происходит???

Я покажу упрощенный код из своего проекта. У меня тут просто батхерт с него...

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? Что за магия?
  • Вопрос задан
  • 302 просмотра
Решения вопроса 1
Он не MyMapper. Он MyMapper$2.
Замени
return new MyModel() {{
           myField = view.myField;
        }};

на
MyModel myModel = new MyModel();
myModel.myField = view.myField;
return myModel;

и магия исчезнет
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы