私は後方互換性を壊すことなく、Javaでのバイトをint型から定数を変更することはできますか?

ダニエルWiddis:

私は提出しています変更JNA以前のリリースと同様に、定数のセットを定義しているint具体的には、タイプ:

int VER_EQUAL = 1;
int VER_GREATER = 2;
int VER_GREATER_EQUAL = 3;
... etc...

(それらが定義されているためinterface、彼らは自動的であるstaticfinal)。

これらの定数は次のように使用されているCondition中で引数VerSetConditionMaskの要求する機能、BYTEJavaのにJNAにマッピングされた引数を、byte

既存の使用するにはint、私はあることをライブラリにこれらの一定の値を変更したいので、それらの型キャストを明示的に私(および他のユーザー)が必要となり、その関数に定数をbyte、例えば、

byte VER_EQUAL = 1;
byte VER_GREATER = 2;
byte VER_GREATER_EQUAL = 3;
... etc...

私は、これらの定数を使用して、任意のコードが、現在、少なくとも期待しなければならないため、この変更ブレークの後方互換性を考えていないint、と喜んで広げますbyte文句なし。私はこれを自分自身を納得させるためにテストコードをたくさん書きました。私は変更すること承知しているObject(のようなタイプIntegerにはByte)仕事ではないだろうが、私は、これはプリミティブの罰金であると考えています。しかし、確認のためにウェブを検索する時間にもかかわらず、私は最も小さいビット納得残ります。

この変更は後方互換性がありますか?それとも私が間違っていると、これはに頼る既存のコードを壊す可能性がある場合がintプリミティブは?

Marco13:

多分それは明らかです。しかし、そうでないかもしれません。いくつかのサードパーティのユーザーがフェッチした場合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でエラーが発生しました。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=138090&siteId=1