返回对象的方法名称



我有能力运行代码,让我进行计算和/或从程序中获取变量信息。然而,我没有访问基本代码,并想知道是否有一种方法打印出所有的方法一个对象有可用的(公共)?

类Shape的例子,有Circle和Square的子类。如果我能够打印出Circle的方法,我可能会看到:

.getRadius()
.setRadius(newValue)

但是Square会有

.getSide()
.setSide(newValue)

我有一个myObject,我知道我可以得到

myObject[1].GetLength()
myObject[1].getDimUom()
myObject[1].getQuantity().getValue()

然而,我不知道我只能设置某些东西,比如(通过试错)

myObject[1].setClass(newValue)

所以我希望能够找到一种方法从对象中打印出方法名;同样,没有任何能力查看或修改基本代码(如添加反射)

你要做的基本上是打破信息隐藏原则,这是OOP中最基本的原则。

你(最有可能)真正想要的是定义一个通用行为,它可以被子类以特定的方式实现。关于您的示例,这可能是在接口中定义的方法changeSizeTo(int newValue),该方法将由您的类实现,每个类将执行特定的操作。

(更新)

我的意思是任何公开的东西都是隐藏的吗?- - -爱德华。

关键不在于实际的访问修饰符,而在于问题:"这是否强制调用者知道这个对象实际上是哪个子类?">

解决方案

你可以使用反射

Class clazz = circle.getRadius().getClass();
Method[] methods = clazz.getMethods();
for ( Method method : methods ) {
System.out.println( method.getName() );
}

话虽如此,你应该听听@Timothy Truckle给出的建议。如果您需要使用它,那么很可能会遇到设计问题,假设您不是在编写框架或库

相关内容

  • 没有找到相关文章

最新更新