首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Guice绑定TypeLiteral

无法使用Guice绑定TypeLiteral
EN

Stack Overflow用户
提问于 2018-06-04 14:03:55
回答 1查看 270关注 0票数 1

我开始学习Guice,但我已经遇到了一个问题。当我试图绑定TypeLiteral时,我会接收Cannot resolve method 'to(anonymous com.google.inject.TypeLiteral<>。我试图找出问题的原因,但没有结果。也许有人知道怎么解决这个问题?

这里是我想使用bind()的类。

代码语言:javascript
复制
public class MainModule extends AbstractModule {
    protected void configure(){
        bind(DeckFactory.class).to(BlackjackDeckCreator.class);
        bind(CardFactory.class).to(BlackjackCardCreator.class);         
        bind(PointsCalculator.class)
          .to(BlackjackPointsCalculator.class);           
        bind(Logic.class)
          .toProvider(CompositeGameLogicStrategyProvider.class);
// Problem
        bind(new TypeLiteral<Randomizer<BlackjackCard>>() { })
          .to(new TypeLiteral<BlackjackCardRandomizer>() {}); 
//    
        bind(DecisionTaker.class)
          .toProvider(CompositeDecisionTakerProvider.class);
        bind(StatisticPrinter.class)
          .to(ConsoleStatisticPrinter.class);        
        bind(HitGameLogicStrategy.class)
          .toProvider(HitGameLogicProvider.class);      
        bind(StandGameLogicStrategy.class)
          .toProvider(StandGameLogicProvider.class);
        install(new FactoryModuleBuilder().build(GameFactory.class));
        install(new FactoryModuleBuilder()
          .build(PlayerFactory.class));       
        bind(StatisticsTemplate.class)
          .toProvider(StatisticsTemplateProvider.class);
    }
}

Randomizer.java

代码语言:javascript
复制
public interface Randomizer<T extends Card> {
    T randomizeCard(List<T> deck);
}

BlackjackCardRandomizer.java

代码语言:javascript
复制
public class BlackjackCardRandomizer implements Randomizer {
    private static final Random RANDOM = new Random();

    @Override
    public Card randomizeCard(List deck) {
        Integer randIndex = RANDOM.nextInt(deck.size());
        return (Card) deck.get(randIndex);
    }
}

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 17:32:23

您应该使用以下方法:

代码语言:javascript
复制
bind(new TypeLiteral<Randomizer<BlackjackCard>>() { })
      .to(BlackjackCardRandomizer.class); 

仅仅因为您有一个TypeLiteral作为接口,并不意味着您必须使用类型文字作为实现。

另外,更改您的extends

代码语言:javascript
复制
public class BlackjackCardRandomizer implements Randomizer<BlackjackCard> {
    private static final Random RANDOM = new Random();

    @Override
    public BlackjackCard randomizeCard(List<BlackjackCard> deck) {
        Integer randIndex = RANDOM.nextInt(deck.size());
        return (Card) deck.get(randIndex);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50682460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档