私はJavaで歯を食いしばっています(ここでは長年のC++の男です)、クラスIntegerをプリミティブ型intに変換する際に少し問題が発生しています。これに対するいくつかの解決策を見てきましたが、どれも機能していないようです。
私のケースをユニークにしているのは、変換がジェネリック クラス内で行われることです (Integer はジェネリック パラメーターです)。このクラスは JProgressBar を拡張し、カスタム (テンプレート化された) インターフェイスである TaskObject を継承します。
ProgressBar クラスのコード:
private class ProgressBar<Integer> extends JProgressBar
implements TaskObject<Integer> {
@Override
public void update(Integer val) {
System.out.println("pbar updating to " + val);
setValue(val);
}
}
TaskObject インターフェイスのコード:
interface TaskObject<T> {
void update(T value);
}
ProgressBar インスタンスは TaskObject の型として SwingWorker スレッドに渡され、そのスレッドから更新されます (したがって update() 関数)。
残念ながら、setValue は Integer 型をとらず、(int) を使用した変換は、Integer クラスの変換メソッドと同様に失敗します。特定のエラーは、最後に「整数はクラスで宣言されたオブジェクトを拡張します...ProgressBar」と述べています。
Integer をジェネリック パラメータとして使用しているという事実が、JProgressBar.setValue() の呼び出しでコンパイラを混乱させていることは明らかなようです。少しの利益のために働くので、私はそれをそこに捨てて、他の誰かが意見を持っているかどうかを確認しようと思いました...