В целом, java придерживается понятия номинальной типизации, а не структурной типизации. Чтобы понять этот аргумент, представьте себе эти два интерфейса:
public interface Camera {
public void shoot(Person target);
}
public interface Gun {
public void shoot(Person target);
}
На структурном языке кого-то ждет действительно, действительно неприятный сюрприз. На номинальном языке это не проблема (обратите внимание, что типы полностью распределены по именам - у них есть имя пакета, то есть даже с омонимами вы не столкнетесь с какими-либо проблемами. java.util.List
и java.awt.List
никоим образом и не взаимозаменяемы, нигде в экосистеме java. Guns and Grandmas).
Здесь применяется аналогичный принцип: A может выглядеть чертовски похоже на B, но в java A не является B. На самом деле, поле 'attriA' не имеет абсолютно никакого отношения к полю 'attriA' B. Тот факт, что у них так случилось, что у них одно и то же имя и один и тот же тип, - чистое совпадение. Фактически, это деталь реализации (частный API); у вас должна быть возможность переименовать поле, и никакой существующий код не должен заботиться об этом или сломаться.
Следовательно, вам это не нужно; это не java -esque.
Но если вы настаиваете, возможно, MapStruct может что-то для вас сделать (хотя я бы не рекомендовал это!).