2

次の実装で BigDecimalWithAttrDisplay という新しいクラスを定義しました。

class BigDecimalWithAttrDisplay extends BigDecimal{
    String display;
    BigDecimalWithAttrDisplay(String val){super(val)}
    public String toString(){
        "BigDecimalWithAttrDisplay{val=${super.toString()}, display='$display'}";
    }
}

このクラスを使用するコードを実行しようとすると、次のようになります。

java.lang.IncompatibleClassChangeError: the number of constructors during runtime and compile time for java.math.BigDecimal do not match. Expected 17 but got 18
at groovy.lang.MetaClassImpl.selectConstructorAndTransformArguments(MetaClassImpl.java:1381)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.selectConstructorAndTransformArguments(ScriptBytecodeAdapter.java:234)
at com.e4x.auto.services.checkout.testapi.model.response.BigDecimalWithAttrDisplay.<init>(BigDecimalWithAttrDisplay.groovy:31)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:77)
at org.codehaus.groovy.reflection.CachedConstructor.doConstructorInvoke(CachedConstructor.java:71)
at org.codehaus.groovy.runtime.callsite.ConstructorSite.callConstructor(ConstructorSite.java:42)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:194)

何が問題で、どうすれば修正できますか?

4

3 に答える 3

5

作成したクラスをクリーンアップしてみてください(プロジェクトを新たに再構築してください)。以前のコンパイルからのアーティファクトがある可能性があります。

もう1つの可能性は、7より前のバージョンでコンパイルされたJava 7およびGroovyコードを使用することです。そうすると、問題が発生する可能性もあります。(例:Geb-IncompatibleClassChangeErrorを参照してください)

于 2013-01-23T09:29:45.820 に答える
1

2.0.5 でバグを再現できませんでしたが、問題がコンストラクターの欠如である場合、Groovy には@InheritConstructorsという注釈があり、これが役立つ可能性があります。

@Delegateも見てください。継承よりかっこいいかも。

于 2013-01-23T11:10:54.083 に答える
0

コンストラクターに super(val) を追加して、BigDecimal コンストラクターへの呼び出しを追加します。

于 2013-01-23T09:40:50.523 に答える