是否有一个带有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文件...
答案 0 :(得分:6)
据我所知,不是在Java SE API中。
通用NamedObject
接口是否有意义是值得商榷的。例如,考虑一个Person
类和一个UnixNamedPipe
类。两者都可以共享相同的NamedObject
接口,但它们的名称实际上具有非常不同的语义。我无法看到例如Collection<NamedObject>
和Person
同时UnixNamedPipe
有意义的情况。
如果您有PetCat
,PetDog
和PetRock
类,则定义此类界面是有意义的。但是你可能会有一个Pet
超类,它已经为所有宠物定义了getName()
。在这种情况下,“名称”的概念不会从一只宠物变为另一只宠物。
答案 1 :(得分:1)
没有像java API那样的东西。正如你所做的那样,使用它并使用这个接口实现你自己的类。
答案 2 :(得分:-1)
java中的所有对象都是从Object.class继承的。 有一个 toString()方法,通常用于获取对象的代表名称。
您可以重新实施此方法:
@Override
public String toString() {
return "The name of this Object";
}