对于java,如何确保内部接口和外部接口具有相同的泛型类型?

Ale*_*uya 5 java generics interface

版本1

public interface Outer<T>{
    public interface Inner<T>{
        T get();
        void set(T t);
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然相同的泛型类型语法,但这两种类型完全独立.

版本2

public interface Outer<T>{
    public interface Inner<V extends T>{
        V get();
        void set(V t);
    }
}
Run Code Online (Sandbox Code Playgroud)

出现错误:"无法对非静态类型T进行静态引用"

版本3

public interface Outer<T>{
    public interface Inner{
       <T> T get();
       <T> void set(T m);
    }
}
Run Code Online (Sandbox Code Playgroud)

不确定这是否是我想要的,但看起来很好(在eclipse中没有错误),所以我尝试实现它:

public Test implements interface Outer.Inner {
       //no problem in these two
       <T> T get(){..};
       <T> void set(T m){...};

        //Errors come up here:
       Map<String,T> map;
       public Test(Map<String,T> map){
            this.map=map
       }

}
Run Code Online (Sandbox Code Playgroud)

错误出现:"T无法解析为类型"

  1. 宣言 Map<String,T> map
  2. 构造函数参数 public Test(Map<String,T> map){}

那么,我该如何解决这个问题呢?

Ken*_*nde 4

首先,没有办法做到这一点,因为外部接口只不过是内部接口的“命名空间”。他们之间确实没有其他关系。

这就引出了一个问题:为什么你需要对事物进行这样的控制?如果在实现该接口的类中,确定使用相同的类型有意义,那么对该类来说也是如此。但另一个实现可以而且应该允许选择其他方式。尤其如此,因为实现 Outer 的类和实现 Inner 的类不限于相互嵌套。