Как можно привести интерфейс к классу? - PullRequest
0 голосов
/ 06 апреля 2011

У меня есть интерфейс Объект Class , предоставленный в качестве параметра метода, и у меня также есть экземпляр Object объекта .casted.

Задача: Привести объект так, как если бы я делал объект interface = object, но вручную, используя метод Class.cast ().

И звезда шоу:

def readObject(type, path) {
        Object obj
        // Prevent playing with NPE
        if (groovyClassLoader == null)
            groovyClassLoader = new GroovyClassLoader(getClass().getClassLoader())

        // The final quest begins
        try {
            Class groovyClass = groovyClassLoader.parseClass(new File(path))

// at this point: type ins an instance of Class which is an interface
// to which I need to assign the obj instance

// groovyClass is an instance of Class 
// out of which I need to get object and eventually cast it to type
// so something like:
//            groovyClass = groovyClass.cast(type)
//            obj = groovyClass.newInstance()
// or
//            obj = groovyClass.newInstance()
//            obj = groovyClass.cast(type)



            obj = groovyClass.newInstance()
            obj = type.cast(obj)

        } catch (ex){
            //TODO:IO and obj creation exception should be logged
            ex.printStackTrace()
        }
        return obj
    }

Это могущественный воинственный квест на выживание с использованием магов, и я начинаю чувствовать, что моя миссия вне возможностей великой земли XD

Ответы [ 2 ]

3 голосов
/ 06 апреля 2011

Вы не можете иметь экземпляр для интерфейса. Интерфейс как шаблон. Конкретные классы, которые реализуют интерфейс, могут иметь свои собственные экземпляры. Предположим, у меня есть следующее:

public interface IExample {
  public void foo();
}

class Example implements IExample {
  public void foo() {
    // do something
  }
}

class MyMain {
  public static void main(String[] args) {
    IExample iExample;
    Example example = new Example();

    iExample = example; // Polymorphism :)

    // IExample iExample = new IExample();  -- is wrong
  }
}

В приведенном выше примере объект «пример» может быть приведен к IExample (Полиморфизм), но вы не можете выделить память для интерфейса IExample, поскольку он ничего не делает.

3 голосов
/ 06 апреля 2011

Вы не можете создать экземпляр интерфейса.Сначала вы должны определить класс, который реализует интерфейс, а затем создать экземпляр этого класса.Затем вы можете передать этот объект в качестве аргумента любому методу, который принимает параметр типа интерфейса.

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