基于条件的不同覆盖方法

时间:2015-11-02 18:19:17

标签: java android

这是一个Android项目,但问题与JAVA本身有关。

我试图覆盖Activity中的方法,但我希望此方法根据以下两个条件运行不同的代码:如果用户已登录且用户的类型是什么。

我覆盖的方法是每次用户触摸屏幕时至少调用一次的dispatchTouchEvent

我可以把条件放在方法中但是如前所述,这是一个被调用的方法,所以我试图避免在其上反复做一些额外的逻辑。

理想情况下,我想要这样的事情:

if (isUserLogged) {
    if (user.getType == 'A') {
        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
            if (//condition based on ev)
                return super.dispatchTouchEvent(ev);
            else
                return true;
        }
    }
    else {
        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
            if (//different condition based on ev)
                return super.dispatchTouchEvent(ev);
            else
                return true;
        }
    }
}

当然这是不可能的。

有关如何避免将所有代码放入方法中的任何提示?

2 个答案:

答案 0 :(得分:3)

您可以创建共享dispatchTouchEvent方法的接口的不同实现。看看Strategy Pattern

答案 1 :(得分:1)

虽然我确定你知道这是不可能的,但类似的东西是可能的,很有可能你想要什么。也许只需在IEnumerable<bool>方法中使用if / switch,然后调用适当的方法。

示例

function y=classify(x) 
    [a b]=size(x);

    %check for empty matrix
    % Do not forget that an empty matrix can be size a x 0 or 0x a, where a can be 
    % arbitrary number

    if (a>0)&&(b==0)||(a==0)&&(b>0)||(a==0)&&(b==0)
        y=(-1);

    %check for scalar
    elseif (a==1)&&(b==1)
        y=0;

    %check for vector 
    elseif (a>=1)&&(b==1)||(a==1)&&(b>=1)
        y=1;

    %other case
    else
        y=2;
end