java - 如何正确使用类类型的参数?
问题描述
在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()”错误。只需替换cf(); 和cg(); 与Tata.f(); 和Tata.g(); 工作正常,但违背了使用参数的目的。如何解决这个问题?
解决方案
毕竟会把评论变成答案。处理你想要的东西的正确(Java)方法是使用接口。因此,在您的演示代码中,实现如下:
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();
}
}
这种方式是完全类型安全的,处理零异常!
推荐阅读
- json - Three.js Uncaught TypeError:加载3D对象时无法读取未定义的属性'0'
- sql - 在 BigQuery 中将 YYYYDDD 字符串转换为 YYYYMMDD
- ios - DispatchGroup 不适用于 URLSession.shared.dataTask
- python - 为 Python 设置路径(窗口)
- r - 新机器的警告消息“在 Windows 数据库中找不到字体系列”
- sql - 重塑 Postgres 表,从长到宽
- angular - 检查商店数据是否已更改
- python - Python:记住过程序列中的状态
- android - Kotlin 中具有 2 个以上构造函数的 init 块
- python - 从 PyCharm 连接到正在运行的 Spark-Session