Java 在不使用反射的情况下动态调用静态方法

Java 在不使用反射的情况下动态调用静态方法,java,generics,java-10,Java,Generics,Java 10,假设我有这样的事情: public class Entity<T> { public Class<T> model; public Entity(Class<T> m){ this.model = m; } } 或 在这种情况下,没有任何静态方法可用。有没有一种方法可以在不使用反射的情况下调用这些静态方法?似乎您希望将类型绑定到实体类中的属性,理想情况下您可以遵循以下方法: class Entity<T> { p

假设我有这样的事情:

public class Entity<T> {

  public Class<T> model;

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

}


在这种情况下,没有任何静态方法可用。有没有一种方法可以在不使用反射的情况下调用这些静态方法?

似乎您希望将类型绑定到
实体
类中的属性,理想情况下您可以遵循以下方法:

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

您确定它不应该是
t model
?不,但是方法句柄速度非常快。不,它是
而不是
t
,请查看构造函数中的赋值。不过,为什么要这样做?如果您在编译时知道类型,您可以使用
String.join
调用静态方法。如果您在编译时不知道类型,编译器将不知道运行时
t
是否有名为
join
的成员。在这种情况下,我传递的是一个类而不是一个实例。我想在类上调用静态方法,但我无法在没有反射的情况下查找它们,似乎是啊,我想format的调用方式是
(new String())。format
不是静态方法
String.format()
…对吗?在共享的示例中(根据讨论中的代码),是的。虽然更好的方法当然是
String.format
。是的,我投了赞成票,但我不认为这是对OP的肯定回答。OP想要传递
String.class
而不是
“字符串”
导入构造函数。@rakim您应该尝试在问题中更好地解释为什么要这样做。@rakim可以重写代码以使用
String.class
而不是
String
;事实上,甚至可以用一种根本不需要向构造函数传递参数的方式重写它。剩下的问题仍然是,为什么?
实体
与您正在做的事情完全无关,只有变量的编译时类型才重要。例如,您还可以编写
字符串s=null;s、 格式(“”)
可选o=Optional.empty();o、 orElse(null).格式(“…”)。如果要隐藏变量的类型,请使用
var o=Optional.empty()就可以了。
ent.model.format() 
ent.model.join()
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 ""