表达式必须是列表类型错误?

时间:2013-05-30 23:42:13

标签: apex-code visualforce

我有以下代码:

public class Testcode {


private static final Long[] P = new Long[18];


 public void setKey( string key )
{
integer i, j, k;
long data;
integer N = 16;
string[] keytemp = new string[]{};
keytemp.add(key);

// Initialize P and S.
for ( i = 0; i < N + 2; ++i ){
    P[i] = Pinit[i];
    }

  // XOR the key into P.
j = 0;
for ( i = 0; i < N + 2; ++i )
    {
    data = 0;
    for ( k = 0; k < 4; ++k )
    {
   data = ( data << 8 ) | keytemp[j];
    ++j;
    }
    P[i] ^= data;
    }   

}    

    private static final long[] Pinit = new Long[] {
   604135516L,   2242044355L,  320440478L ,  57401183L,
    2732047618L,  698298832L,   137296536L ,  3964563569L,
    1163258022L,  954160567L,   3193502383L,  887688400L,
    3234508543L,  3380367581L,  1065660069L,  3041631479L,
    2420952273L,  2306437331L 
   };   
}

我收到以下错误:

错误:编译错误:OR运算符只能应用于布尔表达式或第36行第18行的Integer或Long表达式

就在这一行:

data = ( data << 8 ) | keytemp[j];

还有其他方法可以编写这行代码吗?

由于

1 个答案:

答案 0 :(得分:0)

您是否正在尝试访问密钥变量中的第j位?我不认为Apex支持这样的语法(带索引)。 []运算符是为数组保留的,这就是你得到的错误。

实际上它甚至不是我认为的算子(http://www.salesforce.com/us/developer/docs/apexcode/Content/langCon_apex_expressions_operators_understanding.htm),只是写myList.get(index)的捷径。

再次尝试换档技巧?

Long key = 255;

System.debug(key & (1 << 7));   // 128
System.debug(key & (1 << 8));   // 0