将 Short.MAX_VALUE 递增(溢出)为零,而不是 Short.MIN_VALUE
Increment (overflow) Short.MAX_VALUE to zero, not Short.MIN_VALUE
我正在解决应用程序中的 'tabindex' 缺陷,该应用程序在 Firefox 和 Chrome[=30= 中运行良好],而不是 Internet Explorer。
'tabindex' 由静态 'int' 通过 JSP 设置,每次使用时都会递增。
private static short tabIndex = 1;
sb.append("<select tabindex='").append(tabIndex++) ...
Internet Explorer 的 maximum 'tabindex' 为 32767 (Short.MAX_VALUE
)。所以我可以将 int
更改为 short
,但在达到最大值后,它会跳转至 Short.MIN_VALUE
。
Objects with a negative tabIndex are omitted from the tabbing order.
所以我需要它从 Short.MAX_VALUE
进步到零。
显然,编写一些代码来执行此操作是微不足道的,但我想知道是否有一些巧妙的速记方法可以增加到严格的正数,或者我可以使用的其他一些数据类型。
您可以通过将值与 0x7FFF
进行与操作来确保 MSB 始终为 0。
short s = 32767;
short s1 = (short)(s & 0x7FFF); // s1 = 32767 (or 0x7FFF)
s++; // s = -32768 (or 0x8000)
short s2 = (short)(s & 0x7FFF); // s2 = 0
您可能希望将增量和位掩码提取到它自己的方法中,然后在 append
.
中使用它
我不是在宽恕这段代码,因为它不是很清楚,坦率地说,我不会使用从赋值返回的东西,但以下是一个非常简短的版本:
public short incIndex() {
return tabIndex = (short)(tabIndex+1 & 0x7FFF);
}
...append(incIndex())...
为什么不创建我们自己的包装器类型来处理此限制?
public class ShortValueForTab {
private short value;
public short next() {
value++;
if (value < 0) {
value = 0;
}
return value;
}
}
并在您的客户端代码中:
private static ShortValueForTab tabIndex = new ShortValueForTab();
...
sb.append("<select tabindex='").append(tabIndex.next()) ...
我正在解决应用程序中的 'tabindex' 缺陷,该应用程序在 Firefox 和 Chrome[=30= 中运行良好],而不是 Internet Explorer。 'tabindex' 由静态 'int' 通过 JSP 设置,每次使用时都会递增。
private static short tabIndex = 1;
sb.append("<select tabindex='").append(tabIndex++) ...
Internet Explorer 的 maximum 'tabindex' 为 32767 (Short.MAX_VALUE
)。所以我可以将 int
更改为 short
,但在达到最大值后,它会跳转至 Short.MIN_VALUE
。
Objects with a negative tabIndex are omitted from the tabbing order.
所以我需要它从 Short.MAX_VALUE
进步到零。
显然,编写一些代码来执行此操作是微不足道的,但我想知道是否有一些巧妙的速记方法可以增加到严格的正数,或者我可以使用的其他一些数据类型。
您可以通过将值与 0x7FFF
进行与操作来确保 MSB 始终为 0。
short s = 32767;
short s1 = (short)(s & 0x7FFF); // s1 = 32767 (or 0x7FFF)
s++; // s = -32768 (or 0x8000)
short s2 = (short)(s & 0x7FFF); // s2 = 0
您可能希望将增量和位掩码提取到它自己的方法中,然后在 append
.
我不是在宽恕这段代码,因为它不是很清楚,坦率地说,我不会使用从赋值返回的东西,但以下是一个非常简短的版本:
public short incIndex() {
return tabIndex = (short)(tabIndex+1 & 0x7FFF);
}
...append(incIndex())...
为什么不创建我们自己的包装器类型来处理此限制?
public class ShortValueForTab {
private short value;
public short next() {
value++;
if (value < 0) {
value = 0;
}
return value;
}
}
并在您的客户端代码中:
private static ShortValueForTab tabIndex = new ShortValueForTab();
...
sb.append("<select tabindex='").append(tabIndex.next()) ...