使用extends的泛型的正确java语法

使用extends的泛型的正确java语法,java,generics,syntax,Java,Generics,Syntax,这是一段我正在苦苦挣扎的代码 public class Channel<T extends Something>{ public Channel(){} public void method(T something){} } public class Manager{ private static ArrayList<Channel<? extends Something>> channels = new ArrayLis

这是一段我正在苦苦挣扎的代码

public class Channel<T extends Something>{
   public Channel(){}
   public void method(T something){}
}

public class Manager{
   private static ArrayList<Channel<? extends Something>> channels
         = new ArrayList<Channel<? extends Something>>();
   public static <T extends Something> void OtherMethod(T foo){
      for(Channel<? extends Something> c : channels)
        c.method(foo);  // this does not work
   }
}
公共类频道{
公共频道(){}
公共无效方法(T){}
}
公共班级经理{

private static ArrayList本质上是不安全的

如果在列表中添加一个
频道
,然后用
YourThing
调用
OtherMethod()
,会发生什么情况


您应该使整个类成为泛型(并使成员非静态),并对通道和参数使用相同的
T

您的方法需要一个类型参数
public void method(T foo)

公共类频道{
公共频道(){
}
公开作废法(T-foo){
}
}
公共班级经理{

私有静态ArrayList从未发生过。我简化了代码。OtherMethod会在他的频道中搜索频道并使用它。请不要告诉我我的代码不优美。请告诉我为什么它不正确。@ArcticLord:你的代码编写方式不是这样的。如果你没有显示你的实际代码,我帮不了你。
The method method(capture#1-of ? extends Something) in the type Channel<capture#1-of ? extends Something> is not applicable for the arguments (T)
public class Channel<T extends Something> {
  public Channel() {
  }

  public <T extends Something> void method(T foo) {
  }
}

public class Manager {
   private static ArrayList<Channel<? extends Something>> channels = new ArrayList<Channel<? extends Something>>();

   public static <T extends Something> void OtherMethod(T foo) {
     for (Channel<? extends Something> c : channels)
        c.method(foo); // this does not work
   }
}