【问题标题】:combining 2 method calls in an if-condition在 if 条件中组合 2 个方法调用
【发布时间】:2015-05-20 07:05:34
【问题描述】:

我有两个函数,我想同时调用它们
第一个问题:如果两者都为真,则进行一些操作(在本例中添加标志)。这样称呼他们正确吗?

    if (getCallId()==1 & getCallState()==1 )
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
            | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED

          | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON

            | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
public int getCallState()
{
    return MiniSipService.m_callState;
}
    public int getCallId()
{
    return MiniSipService.m_callId;
}

第二个问题:如果我想否定一个函数,我会怎么做?

【问题讨论】:

    标签: java call


    【解决方案1】:

    使用短路 AND 运算符会更正确:

    if (getCallId()==1 && getCallState()==1 )
    

    或者更好的是,将方法更改为返回布尔值:

    public boolean getCallState()
    {
        return MiniSipService.m_callState == 1;
    }
    
    public boolean getCallId()
    {
        return MiniSipService.m_callId == 1;
    }
    

    并将条件更改为:

    if (getCallId() && getCallState())
    

    当然,如果m_callIdm_callState 可以有两个以上的状态,那么这种更改就没有意义了,但根据您的问题的措辞,我假设它们有两种状态:

    我想打电话给他们,如果他们都是真的...

    【讨论】:

    • 我尝试了第二次,但出现错误:二元运算符'&&'的操作数类型错误
    • @afn 我确实说过使用第二个选项需要将 getCallId()getCallState() 的返回类型更改为布尔值。
    • 拥有一个签名为 boolean get<PropertyName> 的方法非常违反直觉,因为它不遵循 java beans 约定。
    • @SpaceTrucker 我同意。如果 m_callId 和 m_callState 实际上是布尔值(或有两个可能的值),我会重命名这些方法。如果没有,我可能会介绍isValidStateisValidId 等新方法。
    【解决方案2】:

    在 Java 中,& 是按位与,| 是按位或。对于逻辑运算,您应该使用逻辑运算符&&||

    【讨论】:

    • 但这些都是整数。按位运算似乎是合适的。 developer.android.com/reference/android/view/…
    • @Thilo - 如果有人问如何在 java 中调用方法,那么按位运算几乎肯定比预期的更复杂! (并且getCallId()==1 无论如何都会转换为布尔值)
    • 我误读了这个问题。我猜更多的是关于if 条件,然后是关于位标志添加。没关系。
    猜你喜欢
    • 2016-11-24
    • 2018-10-12
    • 2022-11-09
    • 1970-01-01
    • 2015-06-13
    • 2013-03-20
    • 2011-10-09
    • 2010-11-15
    相关资源
    最近更新 更多