如何返回泛型类型的类

我有这个编译问题:

http://img3.mukewang.com/628d9a79000193b606850484.jpg

这是有问题的课程:


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();

  }

我得到:

http://img3.mukewang.com/628d9a87000122a804310137.jpg

然后我尝试了这个:


  public Class<? extends T> getEntityType (){

    return this.model.getClass();

  }

我有:

http://img4.mukewang.com/628d9a94000183ef04370149.jpg

jeck猫
浏览 200回答 3
3回答

三国纷争

你似乎很困惑。您将返回代表 T 的类,而不是 T。让我们将 T 替换为 String 并说明为什么您正在做的事情没有意义:private String model;public String getEntityType() {&nbsp; &nbsp; return model.getClass();&nbsp; &nbsp; // Of course this does not work; model.getClass() is not a string!}public String getEntityType() {&nbsp; &nbsp; return String;&nbsp; &nbsp; // This doesn't even compile.}为了解释,这个:public T getEntityType() {&nbsp; &nbsp; ....}要求您返回任何 T 的实际实例。不是 T 代表的任何类型。就像'String'意味着你应该返回一个实际的String实例,而不是String的概念,类型。也许你打算这样做:public T getEntityType() {&nbsp; &nbsp; return model;}或者更有可能,鉴于您将此方法命名为“getEntityType”,您的意思是:public Class<? extends T> getEntityType() {&nbsp; &nbsp; return model.getClass();}是的? extends T,因为模型是 T 或 T 的任何子类型。

catspeake

下面的代码呢。我认为它有效。&nbsp;public Class<? extends BaseModel> getEntityType (){&nbsp; &nbsp; return model.getClass();&nbsp;&nbsp;&nbsp;}

慕慕森

class Foo<T> {final Class<T> typeParameterClass;public Foo(Class<T> typeParameterClass) {&nbsp; &nbsp; this.typeParameterClass = typeParameterClass;}public void bar() {&nbsp; &nbsp; // you can access the typeParameterClass here and do whatever you like&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python
Java