“Storing"调用静态方法的类
本文关键字:静态方法 调用 Storing quot | 更新日期: 2023-09-27 18:16:23
假设我有一个类A,它调用类B或类C中的静态方法。从哪个类调用将取决于在类A的构造函数中传递的参数。类B和C中需要调用的方法具有相同的方法签名。那么,有没有一种方法可以这样做:
Object call;
if (type == 0)
call = ClassA;
else
call = ClassB;
call.someMethod ();
我知道可以使用接口并让类B和C实现接口,但这需要在每次发生上述调用时创建B或C的对象,这是相当资源密集型的。所以,我想知道是否有其他方法可以做到这一点。
编辑:对不起,如果这不是很清楚,但Object call
是一个类变量和方法调用类B和C需要在类的其他方法中进行,而不仅仅是构造函数。
不要使用静态方法。使用接口(或基类),创建两个类的单个实例,并将它们存储在静态字段中。这样,您就不必每次都进行实例化,只需从字段中获取一个现有的实例即可。
由于方法是静态的,我假设我们正在讨论的是您无法控制的类中的helper方法(否则您可以将它们移动到同一个类中)。在任何情况下,您都可以使用以下在各种情况下都有效的方法:
使用包含指向相关方法的Action
的变量。例如:
Action action;
if (type == 0)
action = ClassA.SomeMethod;
else
action = ClassB.SomeOtherMethod;
action();
当然,如果你想传递参数给被调用的方法,你也可以使用另一种委托类型(例如Action
的通用版本)。
这种方法的一个限制是,您可能想要调用的所有方法都需要具有相同的签名(参数的数量和类型)和相同的返回类型。但是,您仍然可以通过构建适配器函数来解决这个问题,这很容易使用lambdas:
// Assume that ClassA.SomeMethod accepts an int parameter
// If you know the value that should be passed, you can adapt it like this:
if (type == 0)
action = () => { ClassA.SomeMethod(42); };
为什么不在if()语句中调用方法呢?
if( type == 0 )
{
ClassA.someMethod();
}
else
{
ClassB.someMethod();
}
如果需要处理方法的返回值,仍然可以在语句外声明返回对象并在条件块内为其赋值。
嗯,使用if else来设置一个变量来调用一个常用函数。既然你打算使用if/else,为什么不这样做呢?
if (type == 0)
ClassA.SomeMethod();
else
ClassB.SomeMethod();
在示例中,您没有创建任何对象。
调用是静态的,所以不需要创建对象