如果我有一个包含某些字段和方法的Java类,并且如果我想使用某些字段和方法,如果只有某些条件为真,那我怎么能用Java做呢?有可能使用Java反射或静态某种程度吗? 在细节上,我可以解释如下,假设我有一个Java类
public Class Myclass{
public int Version;
private long Field01;
private long Field02;
private void Method01();
private void Method02();
//some other methods ..
}
现在我希望仅当字段Field01
等于int值4时才加载字段Method01()
和方法Version
(它可以是我想要的任何int数)。在Java中有没有办法做到这一点?可能是静态的?
答案 0 :(得分:1)
作为一种更具可扩展性的方法......
public class MyClass {
long version;
long field;
Runnable methodRunnable;
public MyClass(long version) {
this.version = version;
if (version == 4) {
field = 10; // Example
methodRunnable = new Runnable() {
@Override
public void run() {
// ... Implementation here...
}
};
} else {
field = 5;
methodRunnable = new Runnable() {
@Override
public void run() {
// Implement here...
}
};
}
}
public void method() {
methodRunnable.run();
}
}
Java 8会使methodRunnable = () -> {}
的调用更加整洁。当然,将它从构造函数中拉出来会很好......
编辑: 如果你有一个像你说的那么复杂的设置,我会采用接口/实现/工厂方法。
interface ThingDoer {
long getField();
void method();
}
class ThingDoerImpl1 implements ThingDoer {
@Override
public long getField() {
return 4L;
}
@Override
public void method() {
// Implement me here...
}
}
class ThingDoerImpl2 implements ThingDoer {
@Override
public long getField() {
return 25L;
}
@Override
public void method() {
// Implement me here...
}
}
class ThingDoerFactory {
static ThingDoer getFromVersion(long version) {
if (version == 4L) {
return new ThingDoer1();
} else {
return new ThingDoer2();
}
}
}
您可以制作某种地图/切换/其他任何处理getFromVersion
方法的方法,并将每个实现的代码分开,以便更容易看到做什么。