Многообразный и Структурный - PullRequest
0 голосов
/ 11 января 2019

Я не уверен, что это правильное место, чтобы спросить об этом, но я немного экспериментирую с проектом коллектора , и я не уверен, что сценарий, которого я пытаюсь достичь, выполним с коллектором или нет?

У меня есть класс, подобный следующему (который будет создан из стороннего программного обеспечения, которое я не могу контролировать) ..

public ClassA {
    String getUuid();
}

Теперь я хочу, чтобы этот класс реализовал следующий интерфейс ...

@Structural
public Interface InterfaceA {
    String getUuid();
}

для следующего сценария ...

public ClassB<GenTypeA extends InterfaceA> {
}

но, конечно, когда я пытаюсь сделать следующее ...

ClassB varB = new ClassB<ClassA>();

Java начала жаловаться, что ClassA не реализует InterfaceA.

То, что я пытаюсь сделать, выполнимо вообще?

Спасибо за ответы ...

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Теперь вы можете достичь этого в Коллектор. Возникла проблема, препятствующая этому: https://github.com/manifold-systems/manifold/issues/35,, которая была недавно исправлена. Доступен в версии 0.38-альфа.

Еще одно важное замечание. Чтобы завершить ваш пример, вы также должны предоставить расширение для ClassA, чтобы объявить, что оно номинально поддерживает InterfaceA, это необходимо только для того, чтобы избежать приведения универсальных типов, включающих InterfaceA:

package my_project.extensions.path.to.ClassA;

import manifold.ext.api.Extension;

@Extension
public abstract class MyClassAExtension implements InterfaceA {
} 

Узнать больше: http://manifold.systems/docs.html#extension-interfaces

0 голосов
/ 11 января 2019

Это называется Шаблон декоратора или Шаблон адаптера

// Immutable, cannot be changed
public final class ClassA {

    String getUuid() {
        return null;
    }
}

public interface InterfaceA {

    String getUuid();
}

public class ClassB implements InterfaceA {

    private final ClassA delegate;

    public ClassB(ClassA delegate) {
        this.delegate = delegate;
    }

    @Override
    public String getUuid() {
        return delegate.getUuid();
    }
}
...