Java-如何在不知道类名的情况下使用接口调用方法类

时间:2018-09-28 00:38:16

标签: java interface

我是Java的新手,我想从带有接口的实现的Class中调用方法类,而无需知道类名“ 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):ImpementedClass.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)中的Object c,如上面的代码所述。感谢您的进步。

1 个答案:

答案 0 :(得分:2)

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

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

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