gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 19:41:43 25 4
gpt4 key购买 nike

版本 1

public interface Outer<T>{
public interface Inner<T>{
T get();
void set(T t);
}
}

虽然通用类型语法相同,但这两种类型是完全独立的。

版本 2

public interface Outer<T>{
public interface Inner<V extends T>{
V get();
void set(V t);
}
}

遇到错误:“无法对非静态类型 T 进行静态引用”

版本 3

public interface Outer<T>{
public interface Inner{
<T> T get();
<T> void set(T m);
}
}

不确定这是否是我想要的,但看起来不错(在 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
}

}

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

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

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

最佳答案

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

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

关于java - 对于java,如何确保内部接口(interface)和外部接口(interface)具有相同的泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5013844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com