java - 将类作为参数传递给方法,然后调用静态方法
问题描述
我有一个用例,其中一个类存在于 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)
。对我来说看起来过于复杂。
还是有更好的设计?
解决方案
以这种方式使用静态方法不是一个好的设计,也不符合面向对象的原则。
我的建议是尝试将“example()”更改为常规方法,而不是静态方法。
推荐阅读
- javascript - 这个事件发射器什么时候开始?
- azure-devops - 使用 Power Automate 更新 Azure DevOps 中的迭代路径
- visual-studio-code - VSCode 错误:在 127.0.0.1:6009 上启动检查器失败:地址已在使用中
- php - 将过滤器放入来自 firestore 的 livewire 搜索中
- vba - Access VBA 运行时错误 31519:您无法导入此文件
- java - 为 JDBC 驱动程序设置 CLASSPATH 后无法找到或加载主类
- php - PHP 标准 DOMElement::setIdAttribute 错误
- excel - 用于填充的 Excel Office 脚本
- screenshot - 如何在带有状态栏和底部指示器的可编程 iPhone X 系列上截屏?
- android - Android TV - 以编程方式切换到 HDMI 输入