加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

是否可以使用相同的名称加载Java中的两个不同类中的一个?

发布时间:2020-12-15 04:54:08 所属栏目:Java 来源:网络整理
导读:我有很多代码在Foo上调用静态方法,如“Foo.method()”.我有两种不同的Foo实现,并希望根据具体情况使用其中一种.在伪代码中: 文件Foo1.java class Foo1 implements Foo { public static int method() { return 0; }} 文件Foo2.java class Foo2 implements Fo
我有很多代码在Foo上调用静态方法,如“Foo.method()”.我有两种不同的Foo实现,并希望根据具体情况使用其中一种.在伪代码中:

文件Foo1.java

class Foo1 implements Foo {
  public static int method() {
    return 0;
  }
}

文件Foo2.java

class Foo2 implements Foo {
  public static int method() {
    return 1;
  }
}

文件Main.java

if(shouldLoadFoo1()) {
  Foo = loadClass("Foo1");
} else {
  Foo = loadClass("Foo2");
}

这可能与Java元编程有关吗?我无法完全围绕所有动态类加载文档.如果没有,那么做我想做的最好的方法是什么?

解决方法

基本上你有两个具有相同接口但实现不同的类,使用接口做它不是更好吗?

在您的主类中,根据您使用适当实例构建类的环境.

FooInterface foo;
MainClass (FooInteface foo,other fields) {
   this.foo = foo;
}


....

然后只使用他们的foo.

另一种方法是使用AspectJ,在每个Foo.method调用上定义一个切点,在切点的建议中有你的if(shouldLoadFoo1()){Foo1.method()}等等.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读