2017-03-19 3 views
0

I(Groovyで)次のコードを持っている:これは動作しますのJava/Groovyの:インターフェイスの拡張ジェネリックListインタフェース

interface IMyList extends List<ISomething> {}; 

private List<ISomething> list1 = Arrays.asList(new ISomething[1]); 

これは(例外は、以下に示す)はありませんが:

private IMyList list2 = Arrays.asList(new ISomething[1]); 

私が手にエラーがある:

Caught:org.codehaus.groovy.runtime.typehandling.GroovyCastException: 'java.util.Arrays $ ArrayList'クラスのオブジェクト '[null]'を 'IMyList'クラスにキャストできません:groovy.lang.GroovyRuntimeException:できませんでしたIMyList(ヌル)

答えて

0

は、だから私は、このGroovyのアノテーションを使用@Delegate(まだJavaでこれを行う方法を知らない)修正することができました:

1)変更インタフェースのコンストラクタをマッチング見つけます

class MyList implements List<ISomething> { 
     @Delegate List<ISomething> things = Arrays.asList(new ISomething[1]); 
}; 

2)インスタンスを変更:クラスへ

MyList list2 = new MyList(); 

3)これはなぜですか?私はいくつかの関数定義で多型を使用したい:

class Foo { 
    void bar(MyList list) {...} 
    void bar(MyOtherList list) {...} 

これは、理由は型消去のメソッドのシグネチャでストレートジェネリックリストで行うことはできません。

関連する問題