Лучший подход к решению конфликтов имен классов между пространствами имен - PullRequest
6 голосов
/ 04 июля 2011

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

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

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) {}
}

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

1 Ответ

8 голосов
/ 04 июля 2011

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

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

...