Java:更改方法参数的最有效方法
我有个问题。因此,假设有一个JRE固有的类,包含100多个方法:Java:更改方法参数的最有效方法,java,class,Java,Class,我有个问题。因此,假设有一个JRE固有的类,包含100多个方法: class HundredMethods { public void method1(int) { } public void method2(int) { } ... (98 more methods) } 我想改变其中5个方法的参数。具体地说,整数是双倍的和添加一个额外的双参数我当前的解决方案涉及一个包装类:-a:提供对原始类的直接访问 -B:有五种方法可以将双参数(带有一些额外的输入)转换为原始
class HundredMethods {
public void method1(int) {
}
public void method2(int) {
}
... (98 more methods)
}
我想改变其中5个方法的参数。具体地说,整数是双倍的和添加一个额外的双参数我当前的解决方案涉及一个包装类:
-a:提供对原始类的直接访问
-B:有五种方法可以将双参数(带有一些额外的输入)转换为原始的整数参数。因此:
class WrapperMethods{
public HundredMethods original = (assigned at constructor)
public void method1(double,double(extra)) {
int i = (assigned a value in "code" below)
this.original.method1(i);
}
}
除了上面提到的方法外,是否还有另一种轻量级的解决方案来更改和添加“重”类中的几个方法的参数?就在我的代码中实际实现这个解决方案而言,我发现当用户不知道包装类更改了哪些方法时,它可能会变得混乱。事实上,我有一个大约250+的方法类,我正在更改其中的25个方法,因此类越大,代码就越混乱。考虑到我想将代码发布为公共代码,有人必须在每次使用包装器时查找包装器更改的方法
谢谢 您可以创建一个子类,并为要修改的五个方法中的每一个添加两个方法。一个接受
double
,执行逻辑并对原始方法执行super.
调用,另一个接受int
并确保其执行与传入double
时相同的操作
所有其他95个方法仍然可以通过您的子类正常访问
class WrapperMethods extends HundredMethods {
public void method1(double d) {
int i = (assigned a value in "code" below)
super.method1(i);
}
public void method1(int i) {
// Make sure that any calls that happen to pass in an integer,
// also go by your logic.
this.method1((double)i);
}
}
如果您告诉我们您想要包装哪个类,您想要更改哪些方法,以及为什么需要更改它们,我们可以提供更好的替代性。如果它是一个公共的JRE类,并且你想公开你的wrk,为什么不现在就开始?@JBNizet我正在修改java.awt.Component类,并修改任何处理大小或位置的方法。我之所以将我的问题设置为一般性问题,是因为我只发布了项目的0.1版:,这意味着我很可能会更改其他几个UI类的方法。为什么不能将方法签名从
int
更改为double
?所有当前的调用站点都可以工作,因为int
将自动扩展为double
。@请原谅,我还想在5个新的包装方法中添加一个额外的double变量。我已经更新了我的帖子以匹配。首先,谢谢你的回复。我曾考虑过采用您的方法,但在混乱(以及由此产生的额外开发时间)方面,是什么阻止用户意外地将原始方法用于整数呢?我的包装器解决方案旨在阻止使用原始方法,因为它需要在用户访问原始方法之前访问原始类。此外,double作为参数存在,因此用户可以输入小数,因此很遗憾,我不能将整数转换为double。@MaxK您要问的是“是什么阻止用户意外地将原始方法与整数一起使用?”这就是我的代码要解决的问题。通过使用int
参数实现该方法,您可以捕获原始方法的意外使用,并将其引导到double
实现中。因此,我现在意识到您的代码非常有意义,非常抱歉。但是,如果您阅读了我对jbnizet上面的评论的回复,我的项目是0.1版的,在0.2版中,我为每个新方法添加了一个额外的双参数。您将如何着手实施该计划?