2016-04-27 3 views
1

Я в основном пытаюсь выполнить следующий синтаксис (в настоящее время не компилируется). Если кто-то может объяснить, как этого добиться, я был бы признателен. Осложняет дело, я бы метод «добавить» перегружен неоднократноОбъявление подтипов в методе интерфейса

public interface Organization { 
    Organization add(Hub hub); 
} 

public class JpaOrganization implements Organization { 


    @OneToMany(mappedBy = "organization", cascade = CascadeType.ALL) 
    private Set<JpaHub> hubs = new LinkedHashSet<>(); 


    @Override 
    public JpaOrganization add(JpaHub hub) { 
     hub.setOrganization(this); 
     hubs.add(hub); 
     return this; 
    } 
} 

    public interface Hub { 
    void setOrganization(Organization organization); 
    } 


public class JpaHub implements Hub { 
    @Override 
    public void setOrganization(JpaOrganization organization) { 
     this.organization = organization; 
    } 
} 

Я пытаюсь сделать это, чтобы абстрагировать DAO слой далеко за ожидаемой миграции. Таким образом, все реализации «JPA» могут предполагать, что они имеют дело с реализациями JPA, что важно для всех отражений для работы.

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

Я пытался что-то вроде:

<O extends Organization, H extends Hub> O foo(H hub); 

реализации:

@Override 
    public JpaOrganization add(Hub hub) { 
     return this; 
    } 

И это компилируется, но дает мне проверяемое предупреждение, которое указывает мне, я мог бы делать что-то неправильно. Основываясь на том, что я читаю, я не уверен, что смогу сделать это без каких-либо предупреждений.

+0

Пожалуйста, вы можете изменить 'Foo' к методу, который вы пытаетесь применить это в коде выше. –

ответ

1

Определить переменные типа на уровне класса:

public interface Organization<O extends Organization, H extends Hub> { 
    O add(H hub); 
} 
+0

Это будет работать только для этих двух типов. У меня есть несколько перегруженных методов add –

+0

Затем либо используйте переменные того же типа для этих методов add, либо добавьте новые переменные типа на уровне класса, если это необходимо. –

Смежные вопросы