为了账号安全,请及时绑定邮箱和手机立即绑定

如何返回泛型类型的类

如何返回泛型类型的类

jeck猫 2022-05-25 10:54:31
我有这个编译问题:这是有问题的课程:package huru.entity;import io.vertx.core.json.JsonObject;import java.util.Date;public class BaseEntity <T extends BaseModel> extends JsonObject {  private T model;  public BaseEntity(T m){    this.model = m;  }  public void setUpdateInfo(String user){    this.model.updatedBy = user;    this.model.updatedAt = new Date();  }  public JsonObject toJsonObject(){    return JsonObject.mapFrom(this.model);  }  public T getEntityType (){    return this.model.getClass();  // doesn't compile  }}我也尝试过使用 public T getEntityType (){    return T;  // doesn't compile }但这显然也不起作用。有人知道我如何返回该泛型类型的类实例吗?我也试过这个:  public Class<T> getEntityType (){    return this.model.getClass();  }我得到:然后我尝试了这个:  public Class<? extends T> getEntityType (){    return this.model.getClass();  }我有:
查看完整描述

3 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

你似乎很困惑。您将返回代表 T 的类,而不是 T。


让我们将 T 替换为 String 并说明为什么您正在做的事情没有意义:


private String model;


public String getEntityType() {

    return model.getClass();

    // Of course this does not work; model.getClass() is not a string!

}


public String getEntityType() {

    return String;

    // This doesn't even compile.

}

为了解释,这个:


public T getEntityType() {

    ....

}

要求您返回任何 T 的实际实例。不是 T 代表的任何类型。就像'String'意味着你应该返回一个实际的String实例,而不是String的概念,类型。


也许你打算这样做:


public T getEntityType() {

    return model;

}

或者更有可能,鉴于您将此方法命名为“getEntityType”,您的意思是:


public Class<? extends T> getEntityType() {

    return model.getClass();

}

是的? extends T,因为模型是 T 或 T 的任何子类型。


查看完整回答
反对 回复 2022-05-25
?
catspeake

TA贡献1111条经验 获得超0个赞

下面的代码呢。我认为它有效。


 public Class<? extends BaseModel> getEntityType (){

    return model.getClass();  

 }


查看完整回答
反对 回复 2022-05-25
?
慕慕森

TA贡献1856条经验 获得超17个赞

class Foo<T> {

final Class<T> typeParameterClass;


public Foo(Class<T> typeParameterClass) {

    this.typeParameterClass = typeParameterClass;

}


public void bar() {

    // you can access the typeParameterClass here and do whatever you like

 }


}


查看完整回答
反对 回复 2022-05-25
  • 3 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信