【问题标题】:writing a function that needs Class.class as a parameter in java在java中编写一个需要Class.class作为参数的函数
【发布时间】:2013-08-01 22:12:01
【问题描述】:

我想写一个需要Class.class作为参数的函数

示例:

class MyObject{


  public whatTypeGoesHer MyFunction(something1, something2){
//do something with parameters
}

}

class MyObject1{
      MyObject object = new MyObject();

       MyObject1 object2 = object.MyFunction(MyObject1.class,something else);

}

这种类型的调用是我想要实现的,我如何定义“MyFunction”来接受这种类型的参数?

应该用什么来代替“whatTypeGoesHere”?

编辑:

让我改一下问题

  1. 我想使用 GSON 从 JSON 反序列化类 但是,我发现自己在每个要反序列化的类中编写完全相同的方法,只是类名不同

这是我的代码:

public static User fromJSON(String json, Class<?> className) {
    GsonBuilder builder = new GsonBuilder();
    builder.serializeNulls();
    User g1 = builder.create();
    User user = g1.fromJson(json, className.getClass());
    return user;
}

及其在使用类中的调用

User user =   User.fromJSON(json,User.class);

我想把“fromJSON”方法放到某个 utils 类中,因为在每个类中它都是完全相同的,只是它返回的类名不同

我该怎么做?

【问题讨论】:

  • 注意,根据Java Coding风格的方法应该使用小写字母开头。

标签: java class generics


【解决方案1】:

你需要一个Class&lt;?&gt;类型的参数:

public void myFunction(Class<?> something1, SomeOtherType something2)

你应该通过Reflection Tutorial

【讨论】:

  • 参数,不是参数。参数是MyObject1.class
  • 附言。这不会编译。
  • @JonSkeet。哎呀。固定的。谢谢:)
  • @Vash:我们不知道 OP 想要 something2 什么,这几乎不是 Rohit 的错……
  • @Vash。好吧,那部分根本不相关。 OP 对如何将 .class 作为参数传递很感兴趣。我猜他知道为第二个参数提供什么类型。而Object 并不总是一个好的猜测。
【解决方案2】:

你的意思是这样的:

  public <T> void MyFunction(Class<T> something1, SomeOtherType  something2){
  // T= type parameter inside method
  }

【讨论】:

  • 你确定吗? T 可以被视为方法内的类型。请参阅 java 泛型
  • 谢谢!我的方法中缺少“”声明,这就是它不起作用的原因
  • 我应该得到你们的 +1! :)
猜你喜欢
  • 2023-04-09
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 2016-11-13
  • 2012-01-11
  • 2018-12-07
  • 2015-07-03
  • 1970-01-01
相关资源
最近更新 更多