1

1 - 長い xValue = someValue;

2- long yValue = someValue;

3- long otherTolalValue = (long)(xValue - yValue);

そのコード行により、次の例外が発生します。

java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Long.

  • アップデート :

コード片:

StackedBarChart<String,Number> sbc = new StackedBarChart<String,Number>();

XYChart.Series<String, Number> series = new XYChart.Series<String, Long>();
series.getData.add(new XYChart.Data<String, Number>("X1",150));
series.getData.add(new XYChart.Data<String, Number>("X2",50));
sbc.getData.add(series);
long dif = getDif(sbc);

long getDif(XYChart barChart){
XYChart.Series series = (XYChart.Series).getData().get(0);
// X1 at zero position i dont have to use iIterator now.
XYChart.Data<String, Long> seriesX1Data = series.getData().get(0);
XYChart.Data<String, Long> seriesX2Data = series.getData().get(1);

long x1Value = seriesX1Data.getYValue();
long x2Value = seriesX1Data.getYValue();
// line - 3 - exception on the next line
// -4- long value = (x1Value) - (x2Value);
long value = (long)(x1Value) - (long)(x2Value);
return value;
}
  • デバッグ後、私はそれを見つけました。

seriesX1Data,seriesX2Datadouble 値as the passed chart has Number typeが含まれていますが、 getYvalue() は long を返します。これが実行時にその例外でプログラムがクラッシュする理由ですが、インラインでキャストするとキャストが成功しない理由です。そのコンパイラは、型がすでに長いことを認識していると思います!.

4

4 に答える 4

3
long xValue = (long)someValue;
// or : 
long yValue = new Double(someValue).longValue();

long otherTolalValue = xValue - yValue;

ただし、精度が低下することに注意してください。

于 2013-03-21T13:37:36.677 に答える
2

それは不可能だ

long xValue = someValue;
long yValue = someValue;
long otherTolalValue = (long)(xValue - yValue);

3 行のいずれも java.lang.ClassCastException を生成できません

someValues が Double であると仮定すると、

Double someValue = 0.0;

コンパイル エラーが発生します:タイプの不一致: Double を long に変換できません

于 2013-03-21T14:02:58.723 に答える
1

コードが失敗する理由はよくわかりませんが、次のコードも問題なく動作します。

    public class CastingDoubleToLongTest {

      @Test
      public void testCast(){
        double xValue = 12.457;
        double yValue = 9.14;

        long diff = new Double(xValue - yValue).longValue();

        Assert.assertEquals(3, diff);
      }
   }
于 2013-03-21T14:08:41.367 に答える
0

おそらくsomeValueですdouble。に割り当てるには、longキャストする必要があります。

long xValue = (long) someValue;
于 2013-03-21T14:05:27.070 に答える