调用静态方法动态地不使用反射

问题描述 投票:2回答:1

说我有一些像这样:

public class Entity<T> {

  public Class<T> model;

  public Entity(Class<T> m){
    this.model = m;
  }

}

所以我们可以做:

var ent = new Entity<String>(String.class);

但我不能叫:

ent.model.format() 

要么

ent.model.join()

的静态方法等没有在这种情况下是可用的。有没有一种方法来调用,而无需使用反射这些静态的方法呢?

java generics java-10
1个回答
3
投票

好像你要绑定的类型,在你的Entity类的属性,这可以理想地采取的办法为:

class Entity<T> {
    public T model;
    public Entity(T m) {
        this.model = m;
    }
}

然后可以实例化为:

var ent = new Entity<>(""); // T is inferred based on the attribute type in the c'tor call
// or also  explicitly specified as
var ent = new Entity<String>(""); //redundant though 

然后再使用它作为:

ent.model.format(""); // in this example 'model' is a 'String' with empty value ""
© www.soinside.com 2019 - 2024. All rights reserved.