如何将泛型对象作为泛型参数传递给 java 中的其他方法?

新手上路,请多包涵

我在使用通用方法时遇到了麻烦

编译类:

 public class Something<T> {
   public static Something newInstance(Class<T> type){};
   public <T> void doSomething(T input){};
}

我的方法是:

 public <S> void doOtherThing(S input){
      Something smt = Something.newInstance(input.getClass());
      smt.doSomething(input); // Error here
}

它在编译时出错:

没有为 doSomething(T) 找到合适的方法 T 不能转换为捕获#1 of ?扩展 java.lang.Object …

我认为可能有避免这种情况的技巧,请帮忙

原文由 lethanh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 386
2 个回答

我认为 input.getClass() 需要转换为 Class<T>

 public <S> void doOtherThing(S input){
      Something smt = Something.newInstance((Class<T>)input.getClass());
      smt.doSomething(input);
}

原文由 ChenHuang 发布,翻译遵循 CC BY-SA 3.0 许可协议

将 S 类作为参数传递。

 public class Something<T>
{
    public static <T> Something<T> newInstance(Class<T> type)
    {
        return new Something<T>();
    }

    public void doSomething(T input){;}

    public <S> void doOtherThing(Class<S> clazz, S input)
    {
        Something<S> smt = Something.newInstance(clazz);
        smt.doSomething(input);
    }
}

原文由 Bastien 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题