在检查Java中的某些条件后,是否可以加载一些类字段和方法

时间:2016-03-17 22:45:11

标签: java reflection

如果我有一个包含某些字段和方法的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中有没有办法做到这一点?可能是静态的?

1 个答案:

答案 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方法的方法,并将每个实现的代码分开,以便更容易看到做什么。