代码之家  ›  专栏  ›  技术社区  ›  David Padbury

派生类中的泛型类型参数

  •  0
  • David Padbury  · 技术社区  · 16 年前

    groovy似乎无法编译一个类,在这个类中,我从一个泛型基类派生了一个类,并重载了一个返回泛型数组的方法。Java中的同一个示例似乎正确编译,这与我预期的Groovy具有源级兼容性是惊人的。 ref ]

    这可以通过以下适配器示例重现。这个例子也可以在线执行 Groovy Web Console .

    class Person {}
    
    ​abstract class Base​Adapter<T> {
        public T[] getAll() {
            return getAllInternal();
        }
    
        protected abstract T[] getAllInternal()
    }
    
    class PersonAdapter extends BaseAdapter<Person> {
        protected Person[] getAllInternal() {
            return new Person[0];
        }
    }​
    

    编译这将生成消息:

    Script1.groovy: 12: The return type of Person[] getAllInternal() in PersonAdapter is incompatible with [Ljava.lang.Object; getAllInternal() in BaseAdapter
    . At [12:5]  @ line 12, column 5.
        protected Person[] getAllInternal() {
        ^
    
    1 error
    

    我有语法错误吗?或者,这是一个绝妙的问题吗?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Peter Niederwieser    16 年前

    我期望groovy具有源代码级兼容性。

    源代码级的兼容性可能是90%,但并不完美(这也不是一个目标)。

    我有语法错误吗?或者,这是一个绝妙的问题吗?

    可能是个虫子。请提交一份错误报告。