Java - 如何在不知道类名的情况下调用带有接口(interface)的方法类

标签 java interface

我是java新手,我想从具有接口(interface)的实现的类中调用方法类,而不知道类名“ClassA”,它只知道对象c并且我有2个文件。

文件(1)CobaInterface.java

package cobainterface;

public class CobaInterface {

    public static void main(String[] args) {

        ImplementedClass implementedClass = new ImplementedClass();

        ClassA clsA = new ClassA();
        implementedClass.myMethodFromClassA(clsA);
    }

}

class ClassA{
    public Integer getTwo(){
        return 2;
    }
}

interface MyInterface {
    public void myMethod();

    //here interface
    public void myMethodFromClassA(Object c);
}

文件(2):ImementedClass.java

package cobainterface;

public class ImplementedClass extends CobaInterface {
    public void myMethodFromClassA(Object c) {
        //System.out.println(c.getTwo()); <- wrong when call method c.getTwo()
    }
}

如果我想在不知道类名的情况下从 ClassA 调用方法 getTwo() 怎么样,它只知道文件 (2) 中的对象 c,如上面代码中所述。感谢您的提前。

最佳答案

您应该使用泛型类型,以便实现知道对象是什么,

interface MyInterface<T> {
    public void myMethod();

    //here interface
    public void myMethodFromClassA(T c);
}

impl 变为,

package cobainterface;

public class ImplementedClass Implements MyInterface<ClassA> {
    public void myMethodFromClassA(ClassA c) {
        //System.out.println(c.getTwo()); <- wrong when call method c.getTwo()
    }
}

大家一起,

class Scratch {
    public static void main(String[] args) {

        ImplementedClass implementedClass = new ImplementedClass();

        ClassA clsA = new ClassA();
        implementedClass.myMethodFromClassA(clsA);
    }

}

class ImplementedClass implements MyInterface<ClassA> {
    @Override
    public void myMethod() {

    }

    @Override
    public void myMethodFromClassA(ClassA c) {
        System.out.println(c.getTwo());
    }
}

class ClassA {
    public Integer getTwo() {
        return 2;
    }
}

interface MyInterface<T> {
    void myMethod();

    void myMethodFromClassA(T c);
}

你也可以进行类型转换

System.out.println((MyClass)c.getTwo());

但是您将失去类型安全的所有好处。

关于Java - 如何在不知道类名的情况下调用带有接口(interface)的方法类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52546789/

相关文章:

java - 将方法应用于 float 数组流时出现问题?

java - 是否可以将 Spring @Import 或 @Configuration 参数化?

java - 如何使用 EL 从 Map 检索所有值

c# - C++/CLI 实现 C# 接口(interface)

Java:子类实现了接口(interface),父类却覆盖了接口(interface)的成员?

java - 尝试在 JBoss AS 7.1 中访问我的应用程序时出错

java - Maven 找不到 Struts2 依赖项

oop - 具体实现是否应该提供其实现的接口(interface)中不存在的任何公共(public) API?

c# - 模型 View 演示器框架 : In which project should the interfaces live?

java - Spring:如何在运行时更改接口(interface)实现