Java 泛型类方法调用

Java 泛型类方法调用,java,generics,Java,Generics,我为我缺乏泛型知识而道歉。。。我正在努力理解泛型是如何工作的,我不确定它是什么,但我缺少了一个关键的部分,这让我很难理解,所以希望有人能进一步澄清一下,让我克服这个困难 BaseDtoUtil.mapToDto(map, OcrImageDocDto.class); //OcrImageDocDto extends DtoUtils //This method is in class BaseDtoUtil public static <T> List<T> mapTo

我为我缺乏泛型知识而道歉。。。我正在努力理解泛型是如何工作的,我不确定它是什么,但我缺少了一个关键的部分,这让我很难理解,所以希望有人能进一步澄清一下,让我克服这个困难

BaseDtoUtil.mapToDto(map, OcrImageDocDto.class); //OcrImageDocDto extends DtoUtils

//This method is in class BaseDtoUtil
public static <T> List<T> mapToDto(Map<String, Object> map, Class<? extends DtoUtils> klass) throws SparkSQLException{
      T obj = (T)klass.newInstance();
      //return a list of these
}
BaseDtoUtil.maptodo(map,OcrImageDocDto.class)//OCRIMAGEDOCDT扩展数据输出
//此方法位于基于类的outil中
公共静态列表mapToDto(地图地图,类问题1:

public static <T> List<T> mapToDto(
    Map<String, Object> map,
    Class<? extends DtoUtils> klass) throws SparkSQLException{
  T obj = (T)klass.newInstance();
  ...
或约束
T
以扩展
DtoUtils

public static <T extends DtoUtils> List<T> mapToDto(
    Map<String, Object> map,
    Class<? extends T> klass) throws SparkSQLException{
  T obj = klass.newInstance();
  ...
类似于以下内容的操作非常有效:

T obj = klass.newInstance();
List<T> list = new ArrayList<>();
list.add(obj);
return list;
T obj=klass.newInstance();
列表=新的ArrayList();
列表。添加(obj);
退货清单;
问题1:

public static <T> List<T> mapToDto(
    Map<String, Object> map,
    Class<? extends DtoUtils> klass) throws SparkSQLException{
  T obj = (T)klass.newInstance();
  ...
或约束
T
以扩展
DtoUtils

public static <T extends DtoUtils> List<T> mapToDto(
    Map<String, Object> map,
    Class<? extends T> klass) throws SparkSQLException{
  T obj = klass.newInstance();
  ...
类似于以下内容的操作非常有效:

T obj = klass.newInstance();
List<T> list = new ArrayList<>();
list.add(obj);
return list;
T obj=klass.newInstance();
列表=新的ArrayList();
列表。添加(obj);
退货清单;

您需要使用<代码> <代码>,而不是只感兴趣的代码> >代码>和<代码>类:请考虑将签名更改为<代码>公共静态列表MAPtoDTO(map map,类KLASS)< /C> >让方法知道代码>列表>代码>它应该返回哪个类型。“但是如果它是静态方法,它们会做什么?”我不明白你在这里的意思-静态性与泛型或可以返回的内容无关。@Sasha这现在很有意义。谢谢你的输入!这帮了大忙!Andy和Christophe感谢你的输入。也帮了我一把。你需要使用
,而不仅仅是
,和
Cl兴趣:考虑将签名更改为<代码>公共静态列表MAPtoDTO(map map,类KLASS)< /代码> -让方法知道“代码>列表<代码>它应该返回哪个类型。”但是如果它是静态方法,他们会做什么?我不明白你在这里的意思-静态性与泛型或可以返回的内容无关。@Sasha这现在很有意义。谢谢你的输入!这很有帮助!Andy和Christophe感谢你的输入。也帮助我朝正确的方向前进!啊哈,我喜欢答案1。这很有意义。你能解释一下它是如何返回的吗现在知道T是什么吗?它是基于我们在“=”的另一侧设置的还是它如何知道如何解析T值?我现在理解了。我看到它是对象被设置来确定T的。我也喜欢上面关于如何调用此方法的评论……公共静态T MapToToTo(Map Map,类klass)抛出SparkSQLException;这允许我强制它们传入与我设置的值相同的值。Andy你能不能更改类
T
从未真正确定过。它只是扩展了
DtoUtils
,所以我们知道我们可以在它的实例上调用任何
DtoUtils
方法。Hmm那么问题是它为什么要编译?OCRIGEDOCSTO扩展DtoUtils…..这个方法说明的是OCRIGEDOCSTO扩展了OCRIGEDOCSTO,但它没有扩展。是的:
extends
并不意味着“在泛型范围内是的”子类:它意味着“与的子类相同或是的”我喜欢答案1。这很有道理。你能解释一下它是如何知道T是什么的吗?它是基于我们在“=”的另一边设置的吗或者它是如何知道如何解析T值的?我现在理解了。我看到它是对象用来确定T的设置。我也喜欢上面关于如何调用此方法的注释……公共静态T mapToDto(Map Map,类klass)抛出SparkSQLException;这允许我强制它们传入与我设置的值相同的值。Andy你能不能更改类
T
从未真正确定过。它只是扩展了
DtoUtils
,所以我们知道我们可以在它的实例上调用任何
DtoUtils
方法。Hmm那么问题是它为什么要编译?OCRIGEDOCSTO扩展DtoUtils…..这个方法说明的是OCRIGEDOCSTO扩展了OCRIGEDOCSTO,但它没有扩展到。是的:
extends
在泛型范围内并不意味着“是的子类”:它意味着“与的子类相同或是的子类”。请参阅。