gpt4 book ai didi

java - Guice,扩展接口(interface)和构造函数返回类型

转载 作者:行者123 更新时间:2023-11-29 05:51:36 24 4
gpt4 key购买 nike

接口(interface)A及其实现:

public interface A<K, E> {
public void foo();
}

public abstract class AImpl<K, E> implements A<K, E> {
public void foo(){};
}

接口(interface) B,扩展接口(interface) A,及其实现:

public interface B extends A<Integer, String> {
public void bar();
}

public class BImpl extends AImpl<Integer, String> implements B {
public void bar(){};
}

抽象类 C,注入(inject) 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;
}
}

使用 Guice:

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 已正确注入(inject)并可以使用,如果它没有其他方法,则扩展 A(接口(interface) B 为空)。如果我在 B 中添加任何新方法,我无法在 D 中调用它而不将其强制转换为 B。我的主要目标是为用户提供扩展 A 并在 D 中使用此功能的可能性。

最佳答案

If I add any new method in B, I can't call it in D without it casting to B. My main goal is, giving a user possibility to extend A and use this functionality in D.

如果用户需要B而不是A提供的功能,他们应该声明他们需要B。类 D 应该声明它需要什么 - 不依赖转换来确保它在声明的内容之外被正确配置。

关于java - Guice,扩展接口(interface)和构造函数返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13673869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com