Java - Как вызвать класс метода с интерфейсом без имени класса - PullRequest
0 голосов
/ 28 сентября 2018

Я новичок в Java, я хочу вызвать класс метода из реализованного класса с интерфейсом без известного имени класса "ClassA", который знает только объект c, и у меня есть 2 файла.

File (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()
    }
}

Как насчет того, если я хочу вызвать метод getTwo () из ClassA без имени класса, который знает толькоОбъект c из файла (2), как описано в коде выше.Спасибо за продвижение.

1 Ответ

0 голосов
/ 28 сентября 2018

Вы должны использовать универсальные типы, чтобы реализация знала, каким будет объект,

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

, но вы потеряете все преимущества типа saftey.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...