将类作为参数传递给方法,然后调用静态方法 [英] Passing a class as argument to a method, then calling static methods

查看:0
本文介绍了将类作为参数传递给方法,然后调用静态方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用案例,其中一个类存在于包的两个版本中。

package packageV1;

public class MyClass extends BaseClass{

 public static String example(){
      return "Version1";
    }
}
package packageV2;

public class MyClass extends BaseClass{

 public static String example(){
     return "Version2";
      }
}

到目前为止(我相信)还不错。

然后,我有一个使用该类的应用程序,为了避免为不同的包版本重写应用程序,我希望将应该使用的类(即,用于感兴趣的包)作为参数传递给该应用程序。 所以类似于

public class Application{
      
      private Class<BaseClass> selectedClass;

      public void Application(Class<BaseClass> selectedClass){
               this.selectedClass = selectedClass;
               this.selectedClass.example();  // not possible
               }

}

我相信如果我在构造函数中传递MyClass的实例,我可以调用this.selectedClass.example();,但然后我会通过实例对象调用静态方法,这不是很好吗?

另一方面,在上面的示例中,selectedClass是一个Class对象,所以我不能像上面那样调用静态方法example

这是否意味着我应该使用反射?如selectedClass.getMethod(name, parameterTypes)。 在我看来太复杂了。

还是有更好的设计?

推荐答案

@javadev是对的。使用反射几乎总是一个非常糟糕的主意。这是一个过于复杂的问题。

这里不需要反思。在实例上调用静态方法的能力很快被意识到是一个设计错误。以至于有了后续的高度非正交性设计选择,因为它不适用于作为接口成员的静态方法。

简单的解决方案是将静态方法移动到无状态对象的实例方法。不需要Class或其他反射。这是策略设计模式的应用。

这篇关于将类作为参数传递给方法,然后调用静态方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆