我想了解设计模式,我需要知道 我如何在已实现的接口类中检索类的名称,如 遵循:
public interface Flys {
String fly();
}
// Class used if the Animal can fly
class ItFlys implements Flys{
public String fly() {
return getClass().getName()+" is Flying High"; //not working...gives me the ItFlys class name not Dog class name
}
}
//Class used if the Animal can't fly
class CantFly implements Flys{
public String fly() {
return "I can't fly";
}
}
代码来自:http://www.newthinktank.com/2012/08/strategy-design-pattern-tutorial/ 感谢
答案 0 :(得分:2)
您遇到的问题是Dog
和Bird
都没有实现 Flys
接口。相反,每个类包含实现。由于ItFlys
在设计中不知道它包含在哪个类中,因此在其上调用fly()
无法检测其外部的类。
您可以更改fly
方法以取代代表“所有者”的Object
并在所有者的班级上调用getName
来解决问题:
public interface Flys {
String fly(Object owner);
}
// Class used if the Animal can fly
class ItFlys implements Flys{
public String fly(Object owner) {
return owner.getClass().getName()+" is Flying High";
}
}
现在Dog
需要提供自己的fly()
方法实现,将调用转发给flyingType
:
public String fly() {
flyingType.fly(this);
}
答案 1 :(得分:0)
此行封装在ItFlys class
中,因此它获取其包含类的名称。
return getClass().getName()+" is Flying High";
如果对象的实例可用,那么获取其Class的最简单方法是调用Object.getClass()
。当然,这仅适用于所有继承Object的引用类型。假设您的Dog.java
继承Object
,那么您需要以下
return new Dog().getClass().getSimpleName() + " is Flying High";
编辑:getName()
将在返回的String