Приведение нереализованного интерфейса к объекту - PullRequest
2 голосов
/ 10 марта 2019

У меня есть класс с теми же методами, что и интерфейс

public class MyClass {

String getString(final String stringName) {
//doSomething
    };
}

Это определение интерфейса -

public interface MyInterface {

String getString(final String stringName);
}

Возможно ли привести интерфейс к объекту класса-

MyInterface interace = new MyInterface;
MyClass class = (Myclass) interface;

1 Ответ

1 голос
/ 10 марта 2019

Невозможно привести не реализованный объект класса к типу интерфейса, как вы получите ClassCastException во время выполнения. Это потому, что Java не поддерживает утка, набирающую , она не проверяет, совпадают ли сигнатуры метода.

Но вы можете использовать java-8 ссылку на метод , чтобы передать логику, реализованную в MyClass getString, в тип ссылки на интерфейс:

class MyClass {
    String getString(final String stringName) {
        return stringName;
    }
}
interface MyInterface {
    String getString(final String stringName);
}

public static void main(String[] args) {
    //MyInterface  myInterface = (MyInterface)new MyClass(); //java.lang.ClassCastException: class MyClass cannot be cast to class MyInterface
    MyClass clazz = new MyClass();
    MyInterface  myInterface = clazz::getString;
    System.out.println(myInterface.getString("test"));
}

Также вы не можете создать экземпляр интерфейса, как вы это сделали в своем коде.

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