【发布时间】:2011-06-27 06:44:39
【问题描述】:
我有很多代码在 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 元编程实现吗?我无法完全理解所有动态类加载文档。如果不是,那么做我想做的事情的最佳方法是什么?
【问题讨论】:
-
为什么需要动态加载类而不是创建单独的 Foo1 和 Foo2 实例?
-
我猜他的问题是 Foo1 和 Foo2 的方法是静态的。这有点奇怪,对于同一个操作有不同的实现通常意味着他不应该使用静态方法,但是对于这个通用示例很难判断。史蒂夫,这些课程实际上是做什么的?如果他们的合同相同,你为什么不使用接口?
-
你确定
method()是静态的吗?从提供的代码来看,它看起来不是那样的。 -
@Hunter2:假设 Foo 是一个日志类。 Foo1 记录到磁盘,Foo2 记录到网络。有一种静态方法“log”。
-
@Steve,java 中的类是通过引用匹配的,但它们是通过名称解析的。
标签: java metaprogramming