Java: стандартный интерфейс с методом getName ()? - PullRequest
2 голосов
/ 21 февраля 2012

Существует ли стандартный интерфейс Java с методом getName(), который возвращает строку?Я продолжаю находить, что должен сделать свой собственный:

/** objects which know their own names, 
 *  e.g. that are indexed in a Map by their name
 */
interface NamedObject
{
   public String getName()
}

, но я бы предпочел использовать стандартный, если он там есть.


отредактировать для примера - которыйЯ думаю, что это своего рода красная селедка на мой вопрос, поэтому я специально не хочу получить ответы, предлагающие альтернативы, характерные для следующей ситуации.(Я сталкивался с необходимостью интерфейса NamedObject несколько раз, поэтому я надеялся, что это было что-то в стандартной библиотеке.)

Но так как вы попросили некоторый фоновый контекст, вот он:

@Override public void stateChanged(ChangeEvent e) {
    Object obj = e.getSource();             
    if (obj instanceof NamedObject)
    {
        String name = ((NamedObject)obj).getName();
        /* do something based on object's name */
    }
}

В моем текущем проекте у меня есть система с тремя элементами: источник, метод передачи и приемник.Я хочу получить некоторую информацию от источника к получателю, и я контролирую реализацию обоих.К сожалению, метод передачи застрял с использованием объекта, который поддерживает ChangeListener, поэтому все получатель получает ChangeEvent, с помощью которого я могу получить исходный объект.

Поэтому я должен использовать подразумеваемую общую семантику между моим источником и получателемто есть существует общее понимание того, что исходный объект, передаваемый в ChangeEvent, относится к классу X, где я могу выбрать класс X. В этом случае все, что меня действительно волнует, - это имя, из которого я могу получить дополнительные данные.Я могу определить свой собственный интерфейс, я просто надеялся использовать стандартный интерфейс, поскольку источник и приемник находятся в разных файлах .jar ...

Ответы [ 3 ]

6 голосов
/ 21 февраля 2012

Насколько я знаю, не в API Java SE.

1002 * Это спорно, делает ли родовой NamedObject интерфейс смысла.Рассмотрим, например, класс Person и класс UnixNamedPipe.Оба могут использовать один и тот же интерфейс NamedObject, но их имена на самом деле имеют совершенно разную семантику.Я не вижу, например, случая, когда имеет смысл иметь Collection<NamedObject> с Person с и UnixNamedPipe с.

Имеет смысл определить такой интерфейс, если у вас есть классы PetCat, PetDog и, возможно, PetRock.Но тогда у вас, вероятно, будет суперкласс Pet, который уже определяет getName() для всех питомцев.В этом случае понятие «имя» не изменится от одного питомца к другому.

1 голос
/ 21 февраля 2012

Ничего подобного java API не предоставляет. Как вы это делаете, продолжайте в том же духе и реализуйте свой собственный класс с этим интерфейсом.

0 голосов
/ 21 февраля 2012

Все объекты в Java наследуются от Object.class.Существует метод toString () , который часто используется для получения представительного имени объекта.

Вы можете повторно реализовать этот метод:

@Override
public String toString() {      
    return "The name of this Object";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...