首页 > 解决方案 > 将类作为参数传递给方法,然后调用静态方法

问题描述

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

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
               }

}

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

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

这是否意味着我应该使用反射?喜欢selectedClass.getMethod(name, parameterTypes)。对我来说看起来过于复杂。

还是有更好的设计?

标签: javaclassreflectionversionstatic-methods

解决方案


以这种方式使用静态方法不是一个好的设计,也不符合面向对象的原则。

我的建议是尝试将“example()”更改为常规方法,而不是静态方法。


推荐阅读