java - 如何正确使用class类型的参数?

标签 java class inheritance parameters

在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();
        }
    }

准确地说,我希望能够在类TataTiti之间自由切换,以使用它们各自的方法fg

这没有按预期工作,因为我收到无法解析方法'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/

相关文章:

C++ 模板和继承

html - 为什么一些一次性使用的元素在 CSS 中是 Class 而不是 ID?

c# - 检查 List 的属性是否属于给定类型

c++ - 有没有办法用父类的命名空间/类空间来引用子类?

c# - 基类上的空方法与显式类型检查

java.lang.IllegalStateException : missing behavior definition for the preceding method call getLast(. ..)

java - 在现有类上使用派生类 - 继承

c++ - 在类中使用 C++0x TR1 random 以降低开销

java - 使用java读取具有utf-8编码的文本文件

java - 为什么异常类引用变量在java中打印消息?