提供基于构造函数的访问方法

时间:2014-04-11 05:00:04

标签: java constructor

在我的程序中,我希望能够基于我初始化的构造函数访问某些方法,而不是其他任何方法。例如:

public class A {
    int paramOne;
    float paramTwo;

    public A(int paramOne) {
        // Constructor One
    }

    public A(float paramTwo) {
        // Constructor Two
    }

    public void ConstructorOneMethodOnly(int paramOne) {
        // Only used when Constructor One is initialized
    }

    public void ConstructorTwoMethodOnly(float paramTwo) {
        // Only used when Constructor Two is initialized
    }

}

在给出的代码中,有没有办法实现我在评论和问题中描述的内容?如果是这样,你能描述一下这样做吗?

3 个答案:

答案 0 :(得分:2)

根据Sotirios Delimanolis'注释,您不能基于所使用的构造函数来限制方法的可访问性。

我认为这个逻辑应该分为两类,即我能找到的更清晰的实现。

public class IntDemo {

    int paramOne;

    public IntDemo (int paramOne) {
        ...
    }

    public void ConstructorOneMethodOnly(int paramOne) {
        ...
    }

}

class FloatDemo {

    float paramTwo;

    public FloatDemo(float paramTwo) {
        ...
    }

    public void ConstructorTwoMethodOnly(float paramTwo) {
        ...
    }
}

答案 1 :(得分:0)

public class A {
    int paramOne;
    float paramTwo;
    int constr = 0;

    public A(int paramOne) {
        // Constructor One
        constr = 1; 
    }

    public A(float paramTwo) {
        // Constructor Two
        constr = 2;
    }
}

并在调用方法之前检查constr变量。

答案 2 :(得分:0)

我不确定这是否对您有直接帮助,但它可能对您有所帮助。

我建议使用这样的通用类。

public class A<T> {

    public A(final T t) {

    }

    public void method(final T t) {

    }
}

如果您不知道如何使用泛型类,那么这是一个例子

final A<Integer> aInteger = new A<Integer>(1);
final A<Float> aFloat = new A<Float>(5.4f);

希望这有帮助!