简体   繁体   English

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

[英]Java - How to call method class with interface without know class name

I'm new in java, I want to call method class from implemented Class with interface without know class name "ClassA", which only know Object c and I have 2 file. 我是Java的新手,我想从实现的类调用带有接口的方法类,而无需知道类名“ ClassA”,该类名仅知道对象c,并且我有2个文件。

File (1) CobaInterface.java 文件(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);
}

File (2) : ImpementedClass.java 文件(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()
    }
}

How about if I want to call method getTwo() from ClassA without know Class Name, which only know Object c from file (2) as describe in code above. 如果我想在不知道类名的情况下从ClassA调用方法getTwo(),那该如何从文件(2)中知道对象c,如上面的代码所述。 Thanks for advance. 感谢前进。

You should use generic types so the implementation knows what the object will be, 您应该使用通用类型,以便实现知道对象是什么,

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

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

The impl becomes, 展示变成

package cobainterface;

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

All together, 全部一起,

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

You could also do a cast 你也可以做演员

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

but you will lose all benefit of type saftey. 但是您将失去所有安全类型的好处。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM