java:带getName()方法的标准接口?

时间:2012-02-21 16:00:23

标签: java interface

是否有一个带有getName()方法的标准Java接口返回一个字符串?我一直觉得我必须自己创造:

/** 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.在这种情况下,我真的很在乎about是名称,我可以从中获取其他数据。我可以定义自己的界面,我只是希望能够使用标准接口,因为源和接收器在不同的.jar文件...

3 个答案:

答案 0 :(得分:6)

据我所知,不是在Java SE API中。

通用NamedObject接口是否有意义是值得商榷的。例如,考虑一个Person类和一个UnixNamedPipe类。两者都可以共享相同的NamedObject接口,但它们的名称实际上具有非常不同的语义。我无法看到例如Collection<NamedObject>Person同时UnixNamedPipe有意义的情况。

如果您有PetCatPetDogPetRock类,则定义此类界面是有意义的。但是你可能会有一个Pet超类,它已经为所有宠物定义了getName()。在这种情况下,“名称”的概念不会从一只宠物变为另一只宠物。

答案 1 :(得分:1)

没有像java API那样的东西。正如你所做的那样,使用它并使用这个接口实现你自己的类。

答案 2 :(得分:-1)

java中的所有对象都是从Object.class继承的。 有一个 toString()方法,通常用于获取对象的代表名称。

您可以重新实施此方法:

@Override
public String toString() {      
    return "The name of this Object";
}