私は提出しています変更にJNA以前のリリースと同様に、定数のセットを定義しているint
具体的には、タイプ:
int VER_EQUAL = 1;
int VER_GREATER = 2;
int VER_GREATER_EQUAL = 3;
... etc...
(それらが定義されているためinterface
、彼らは自動的であるstatic
とfinal
)。
これらの定数は次のように使用されているCondition
中で引数VerSetConditionMaskの要求する機能、BYTE
JavaのにJNAにマッピングされた引数を、byte
。
既存の使用するにはint
、私はあることをライブラリにこれらの一定の値を変更したいので、それらの型キャストを明示的に私(および他のユーザー)が必要となり、その関数に定数をbyte
、例えば、
byte VER_EQUAL = 1;
byte VER_GREATER = 2;
byte VER_GREATER_EQUAL = 3;
... etc...
私は、これらの定数を使用して、任意のコードが、現在、少なくとも期待しなければならないため、この変更ブレークの後方互換性を考えていないint
、と喜んで広げますbyte
文句なし。私はこれを自分自身を納得させるためにテストコードをたくさん書きました。私は変更すること承知しているObject
(のようなタイプInteger
にはByte
)仕事ではないだろうが、私は、これはプリミティブの罰金であると考えています。しかし、確認のためにウェブを検索する時間にもかかわらず、私は最も小さいビット納得残ります。
この変更は後方互換性がありますか?それとも私が間違っていると、これはに頼る既存のコードを壊す可能性がある場合がint
プリミティブは?
多分それは明らかです。しかし、そうでないかもしれません。いくつかのサードパーティのユーザーがフェッチした場合int
の値をとしてローカルに保存されたInteger
変更、オブジェクトint
へのbyte
が、コンパイル時にエラーが発生します。
interface IntToByteWithInt
{
int VER_EQUAL = 1;
int VER_GREATER = 2;
int VER_GREATER_EQUAL = 3;
}
interface IntToByteWithByte
{
byte VER_EQUAL = 1;
byte VER_GREATER = 2;
byte VER_GREATER_EQUAL = 3;
}
public class IntToByte
{
public static void main(String[] args)
{
Integer a = IntToByteWithInt.VER_EQUAL;
// Type mismatch: cannot convert from byte to Integer
Integer b = IntToByteWithByte.VER_EQUAL;
}
}
それを超えて、私は1つが、少なくとも言及するべきだと思い反射完全性について。
私はまた、三項演算子(と考えhttps://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.25.2ホット候補として)が、原因に管理していませんでしたその1でエラーが発生しました。