Вы почти наверняка выиграете, если попытаетесь сделать это по-другому, количество способов, которыми эта схема может потерпеть неудачу, тревожно велико. Вот несколько предложений:
Добавьте какой-нибудь метод заклинателя:
class ADTO
{
private String empId;
private String empName;
private String dept;
// setters and getters
public ABO toABO() // caster method (ABO will need a toADTO() as well)
{
ABO a = new ABO();
a.setSomething(getSomethingEquivalent());
...
return a;
}
}
Прокси-класс, возможно, подкласс предполагаемого класса. Вам понадобится 2, по одному производному от каждого класса.
class ADTO_Proxy extends ADTO
{
private ABO abo;
public ADTO_Proxy(ABO a)
{
super();
abo = a;
}
@override
public String getEmployeeId()
{
return abo.getLoginId();
}
// other setters and getters
}
Вместо того, чтобы пытаться сделать адаптер, объедините классы. Может быть легко выполнено с помощью следующего:
class ADTO
{
private String empId;
private String empName;
private String dept;
// getters and setters for each variable by each name
public String getEmployeeId()
{ return empId; }
public String getLoginId()
{ return empId; }
public String getEmployeeName()
{ return empName; }
public String getUsername()
{ return empName; }
public String getDepartment()
{ return dept; }
public String getGroup()
{ return dept; }
// setters
}
Это также можно сделать с помощью интерфейсов.
Рейтинги HateYourselfLater™:
Первый метод оценивается как 2, лучший из трех. Оценка заработана, потому что вы никогда не обнаружите, что случайно переключаетесь между ними, и не нужно менять много другого кода.
Второй метод занимает -3, в середине из трех. Оценка заработана, потому что вы можете иногда смешивать объекты одного типа с другими, что может привести к непреднамеренным побочным эффектам. Вы можете уменьшить это значение до 0, если исключите сеттеры из прокси-классов, но это ограничивает функциональность.
Третий метод получает -5, худший из трех. Оценка заработана, потому что есть много возможностей для побочных эффектов, а избыточный код, вероятно, позже сбьет вас с толку. Тем не менее, вы можете получить рейтинг 1, рефакторинг всего, чтобы правильно использовать только один класс, но это может потребовать много работы, и вы будете ненавидеть себя за это сейчас.
Тем не менее, ваша первоначальная идея создания класса на лету для преобразования между двумя рангами около -10, потому что его будет ужасно сложно поддерживать и он будет очень чувствителен к любым изменениям базовых классов, и, вероятно, его будет легко сломать.
Шкала HateYourselfLater™ находится в диапазоне от -10 до 10, где 10 означает наибольшее количество лайков, а -10 — наибольшее количество ненависти.
Оригинальный ответ:
Вам нужен декомпилятор. Есть несколько декомпиляторов Java, доступных на выбор, я перечислю несколько:
- Showmycode — простой в использовании, приличная декомпиляция, онлайн (поэтому не подходит для корпоративных материалов), портит встроенные имена классов и вложенные анонимные классы
- Jad — загружаемый, интерфейс командной строки, работает, но производит уродливый код, версия Linux устарела (при необходимости используйте версию Windows с вином), испорченные перечисления, циклы foreach и некоторые попытки/ловушки
- Fernflower - CLI, трудно найти, лучший вывод из трех, автор ТАК пользователь, приличный вывод, иногда лажает попытка/ловит
Ни один из них не идеален, но это всего лишь результат того, что некоторые данные теряются при компиляции, и декомпиляторы должны угадать, как изначально выглядела программа.
person
Wug
schedule
01.08.2012
.class
, а не исходного кода Java. - person Peter Lawrey   schedule 01.08.2012