Java – how to wrap Google Guice’s injector method?

I'm writing an API that uses Guice for all di and want to hide all Guice "content" of API developers I have the following:

public class MyAppModule extends AbstractModule {
    @Override
    public void configure(Binder binder) {
        // Omitted for brevity...
        // For instance,binds interface type Animal to impl type Dog,etc.
    }
}

public class MyInjector {
    public abstract<?> inject(Class<?> clazz) {
        MyAppModule module = new MyAppModule();
        Injector injector = Guice.createInjector(module);

        return injector.getInstance(clazz);
    }
}

// So that API developers can just use Animal references and Guice will
// automatically inject instances of Dog
MyInjector injector = new MyInjector();
Animal animal = injector.inject(Animal.class); // <-- Guice returns a Dog instance

The problem lies in my myinjector #injection (class ) method In the way of writing, I received a compiler error:

Multiple markers at this line
- Return type for the method is missing
- Syntax error on token "?",invalid TypeParameter

According to Guice docs, the injector #getinstance returns an abstract < T > If possible, I want to avoid using generics and explicit type conversions to simplify operations for my API developers Do I have any choice? If so, what are they? If not, why? Thank you in advance

Solution

Do not use wildcards? Use something like t

In addition, an abstract method cannot have an implementation, so you need to delete it (you rewrite the method)

public <T> T inject(Class<T> clazz) {
    MyAppModule module = new MyAppModule();
    Injector injector = Guice.createInjector(module);

    return injector.getInstance(clazz);
}
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>