在java中,我想做这样的事情
public class Tata{
public static void f(){
//something
}
public static void g(){
//something
}
}
public class Titi{
public static void f(){
//something
}
public static void g(){
//something
}
}
public class Toto{
private Class c = Tata.class; //or Titi.class
public static void main(String[] args) {
c.f();
c.g();
}
}
准确地说,我希望能够在类Tata和Titi之间自由切换,以使用它们各自的方法f或g。
这没有按预期工作,因为我收到无法解析方法'f()'错误。只需将 c.f(); 和 c.g(); 替换为 Tata.f(); 和 Tata.g(); 工作正常,但违背了使用参数的目的。怎么解决这个问题?
最佳答案
毕竟会把评论变成答案。处理你想要的事情的正确(Java)方法是使用接口(interface)。因此,在您的演示代码中,实现如下:
public interface TheFGFunctions {
void f();
void g();
}
public class Tata implements TheFGFunctions {
@Override
public void f() {
//something
}
@Override
public void g() {
//something
}
}
public class Titi implements TheFGFunctions {
@Override
public void f() {
//something
}
@Override
public void g() {
//something
}
}
public class Toto {
private TheFGFunctions c;
public Toto(TheFGFunctions c) {
this.c = c;
}
public void notStaticFunction() {
c.f();
c.g();
}
}
这种方式是完全类型安全的,可以处理零异常!
关于java - 如何正确使用class类型的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57992001/