Java编译错误:方法ClassX <! - ?扩展ClassY - > XXX类型不适用于参数ClassX <t>,其中T扩展ClassY

时间:2016-06-27 22:39:29

标签: java generics generic-programming

最容易解释我的问题的是一个例子。 我有一个编译问题:

The method setOptions(ArgBuilder<Option<? extends Command>>) 
in the type Command is not applicable for the arguments (ArgBuilder<Option<T>>)

但是T被宣布为扩展Command的泛型,所以我不明白为什么这不起作用。  可以使用下面的4个类复制此编译问题,编译问题将出现在我Steps行粘贴的c.setOptions(options);类中。

我想知道是否有办法解决此编译错误。

package xyz.com; 

import java.lang.reflect.Constructor; 

public class Main { 

    public abstract class Option<T extends Command>{} 

    public abstract class Command{ 
        protected ArgBuilder<Option<? extends Command>> options; 

        void setOptions(ArgBuilder<Option<? extends Command>> options){ 
            this.options = options; 
        } 
    } 

    public class ArgBuilder<T extends Option<? extends Command>>{} 

    public class Steps<T extends Command>{ 
        protected Class<T> newCommandClass; 
        protected ArgBuilder<Option<T>> options; 

        public Command build(){ 
            try { 
                Constructor<T> ctor = newCommandClass.getConstructor(); 
                Command c = ctor.newInstance(); 
                c.setOptions(options); 
                return c; 
            } catch (Exception e) { 
                e.printStackTrace(); 
                return null; 
            } 
        } 
    } 

}

0 个答案:

没有答案