Лучший подход к устранению коллизий имен классов между пространствами имен

У меня возникла проблема с вспомогательным классом, над которым я работаю, чтобы перевести между двумя классами с одинаковым именем. Оба класса находятся вне сферы моего контроля, поэтому я не могу просто переименовать их.

Все мои основные варианты включают полное объявление пространства имен по крайней мере для одного из типов:

import com.myco.second.long.package.namespace.MyObject;
public class MyObjectConvertor {

    MyObject transform(com.myco.first.long.package.namespace.MyObject o) {}
}

Или обратный подход:

import com.myco.first.long.package.namespace.MyObject;
public class MyObjectConvertor {

    com.myco.second.long.package.namespace.MyObject transform(MyObject o) {}
}

Или объявить оба пространства имен для более явного шаблона:

public class MyObjectConvertor {

    com.myco.second.long.package.namespace.MyObject 
        transform(com.myco.first.long.package.namespace.MyObject o) {}
}

Есть ли другое решение, которое могло бы привести в порядок эти сигнатуры методов? Мне интересно, возможно ли какое-то решение в стиле C++ "typedef"?


person seanhodges    schedule 04.07.2011    source источник


Ответы (1)


Невозможно подправить сигнатуры, по крайней мере на один класс нужно будет ссылаться по полному имени класса.

А в вашем особом случае я бы даже сказал: не импортируйте ни один из этих классов, используйте версию 3 в своем исходном коде, чтобы все были полностью осведомлены о том, что ваши преобразующие классы с тем же именем, что определены в разных пакетах.

person Andreas Dolk    schedule 04.07.2011