Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何在不知道类名的情况下使用接口调用方法类_Java_Interface - Fatal编程技术网

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

Java-如何在不知道类名的情况下使用接口调用方法类,java,interface,Java,Interface,我是java新手,我想从实现的类调用方法类,接口不知道类名“ClassA”,只知道对象c,我有2个文件 文件(1)CobaInterface.java package cobainterface; public class CobaInterface { public static void main(String[] args) { ImplementedClass implementedClass = new ImplementedClass();

我是java新手,我想从实现的类调用方法类,接口不知道类名“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):impmentedClass.java

package cobainterface;

public class ImplementedClass extends CobaInterface {
    public void myMethodFromClassA(Object c) {
        //System.out.println(c.getTwo()); <- wrong when call method c.getTwo()
    }
}
包装协同界面;
公共类实现的类扩展了协同界面{
public void myMethodFromClassA(对象c){

//System.out.println(c.getTwo());您应该使用泛型类型,以便实现知道对象将是什么

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

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

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

您也可以进行强制转换-也许应该检查一下
实例如果我完全忘记了,有几种方法可以更安全地进行强制转换。@ScaryWombat.notices.@darrenforsyth谢谢您的帮助,这打开了我对java的认识,,
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());