没有收集的泛型

Lum*_*mpy 4 java generics

我有一个方法,通常从列表中获取一个项目,并具有以下签名:

myMethod(T item)
Run Code Online (Sandbox Code Playgroud)

我想使用这种方法,但我知道我发送的方法.

SpecificItem myItem = new SpecificItem();

myMethod((T) myItem);
Run Code Online (Sandbox Code Playgroud)

这不适合我.这是不良代码的标志吗?

And*_*s_D 9

myMethod 在泛型类中定义,有点像:

public class MyClass<T> {
   T myItem;

   public void myMethod(T item) {
      // do Something with item
   }

   public T myOtherMethod() {
      myMethod(myItem);   // casting is not necessary
      return myItem;
   }

}
Run Code Online (Sandbox Code Playgroud)

如果您实例化此类,则将变量类型T与实际类型进行交换:

MyClass<SpecificItem > concreteClass = new MyClass<SpecificItem >();
Run Code Online (Sandbox Code Playgroud)

如果你调用myMethod这个实例,你必须提供一个SpecificItem,因为SpecificItem这个实例的泛型类型.

(我不确定我的帖子回答你的问题,请评论,以便我可以改进它)

  • @Lumpy,是的,这就是为什么他们都被命名为"T".如果你想要多种类型,你可以做myInterface <T,S>等等(参见,例如,Map) (2认同)