1
接口A和它的實現:吉斯,延伸接口和構造返回類型
public interface A<K, E> {
public void foo();
}
public abstract class AImpl<K, E> implements A<K, E> {
public void foo(){};
}
界面B,它擴展接口A,和它的實現:
public interface B extends A<Integer, String> {
public void bar();
}
public class BImpl extends AImpl<Integer, String> implements B {
public void bar(){};
}
一個抽象類C,它獲取A噴出:
public abstract class C<K, E> {
A<K, E> a;
@Inject
public setA(A<K, E> a){
this.a = a;
}
public A<K, E> getA(){
return a;
}
}
隨着吉斯:
bind(new TypeLiteral<A<Integer, Book>>(){}).to(BImpl.class);
而最後的類,它擴展了C類:
public class D extends C<Integer, String> {
public void fooBar(){
this.getA().bar(); //Gets BImpl injected by Guice, and call bar(): Not working - error
((B) this.getA()).bar(); //Working
}
}
喜歡,你可以從在線評論看,BImpl被正確注射,可以使用,如果沒有額外的方法,擴展A(接口B是空的)。如果我B中添加任何新的方法,我不能沒有它鑄造B.我的主要目標是把它稱爲d,給用戶的可能性在D.