- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚开始学习Guice,但我已经遇到了一个问题。我有一个接口(interface) PlayerFactory
和一个实现 BlackjackPlayer
PlayerFactory.java
public interface PlayerFactory {
Player createPlayer(String name);
Player createPlayer(String name, boolean isDealer);
}
BlackjackPlayer.java
public class BlackjackPlayer implements PlayerFactory {
private PointsCalculator pointsCalculator;
public BlackjackPlayer(){
pointsCalculator = new BlackjackPointsCalculator();
}
@Override
public Player createPlayer(String name) {
return new Player(pointsCalculator, name);
}
@Override
public Player createPlayer(String name, boolean isDealer) {
return new Player(pointsCalculator, name, isDealer);
}
}
玩家等级
public class Player{
private PointsCalculator pointsCalculator;
private List<Card> cardsInHand;
private Integer points;
private String name;
private boolean isDealer;
private boolean endedTurn;
@AssistedInject
public Player(PointsCalculator blackjackPointsCalculator, String name){
pointsCalculator = blackjackPointsCalculator;
cardsInHand = new ArrayList<>();
points = 0;
this.name = name;
isDealer = false;
endedTurn = false;
}
@AssistedInject
public Player(PointsCalculator blackjackPointsCalculator, String name, boolean isDealer){
pointsCalculator = blackjackPointsCalculator;
cardsInHand = new ArrayList<>();
points = 0;
this.name = name;
this.isDealer = isDealer;
endedTurn = false;
}
public void addCardToHand(Card card) {
cardsInHand.add(card);
updatePoints();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Player)) return false;
Player player = (Player) o;
return getPoints() == player.getPoints() &&
isDealer() == player.isDealer() &&
isEndedTurn() == player.isEndedTurn() &&
Objects.equals(pointsCalculator, player.pointsCalculator) &&
Objects.equals(getCardsInHand(), player.getCardsInHand()) &&
Objects.equals(getName(), player.getName());
}
@Override
public int hashCode() {
return Objects.hash(pointsCalculator, getCardsInHand(), getPoints(), getName(), isDealer(), isEndedTurn());
}
public void updatePoints() {
points = pointsCalculator.calculatePoints(cardsInHand);
}
public List<Card> getCardsInHand(){
return cardsInHand;
}
public Integer getPoints(){
return points;
}
public String getName(){
return name;
}
public boolean isDealer() {
return isDealer;
}
public boolean isEndedTurn() {
return endedTurn;
}
public void setName(String name){
this.name = name;
}
public void setDealer(boolean isDealer){
this.isDealer = isDealer;
}
public void setEndedTurn(boolean endedTurn){
this.endedTurn = endedTurn;
}
}
我想使用 Guice 辅助注入(inject)来创建 Player
。以前我是这样做的:
install(new FactoryModuleBuilder().build(PlayerFactory.class));
我知道这是错误的方式,因为我收到错误消息:
1) com.github.blackjack.model.Player has @AssistedInject constructors, but none of them match the parameters in method com.github.blackjack.factory.PlayerFactory.createPlayer(). Unable to create AssistedInject factory.
while locating com.github.blackjack.model.Player
at com.github.blackjack.factory.PlayerFactory.createPlayer(PlayerFactory.java:1)
2) com.github.blackjack.model.Player has @AssistedInject constructors, but none of them match the parameters in method com.github.blackjack.factory.PlayerFactory.createPlayer(). Unable to create AssistedInject factory.
while locating com.github.blackjack.model.Player
at com.github.blackjack.factory.PlayerFactory.createPlayer(PlayerFactory.java:1)
我尝试添加构造函数 Player(String name)
、Player(String name, boolean isDealer)
但没有帮助。有人知道我应该做什么来解决这个问题吗?
提前致谢!
最佳答案
您需要在注入(inject)参数上使用@Assisted
注释:
PlayerFactory.java
public interface PlayerFactory {
Player createPlayer(String name);
Player createPlayer(String name, boolean isDealer);
}
BlackjackPlayer.java(将其从工厂更改为实际播放器)
public class BlackjackPlayer implements Player {
private final PointCalculator pointsCalculator;
private final String name;
private final boolean isDealer;
@AssistedInject BlackjackPlayer(PointCalculator pointsCalculator, @Assisted String name) {
this.pointsCalculator = pointsCalculator;
this.name = name;
this.isDealer = false;
}
@AssistedInject BlackjackPlayer(PointCalculator pointsCalculator, @Assisted String name, @Assisted boolean isDealer) {
this.pointsCalculator = pointsCalculator;
this.name = name;
this.isDealer = isDealer;
}
}
并按如下方式使用该模块:
install(new FactoryModuleBuilder()
.implement(Player.class, BlackjackPlayer.class)
.build(PlayerFactory.class)
);
关于java - Guice AssistedInject 找不到匹配的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50695605/
我有一个如下所示的构造函数: @Inject public MyClass( @Named("config") String configFile, @Named("t
我刚刚开始学习Guice,但我已经遇到了一个问题。我有一个接口(interface) PlayerFactory 和一个实现 BlackjackPlayer PlayerFactory.java pu
关于 assisted injection 的页面解释了如何通过使用 @Assisted 注释构造函数中的一些参数来完成辅助注入(inject),但它没有解释 @AssistedInject 注释的用
我一直在一个项目中使用 guice。 我有一个抽象类,它有很多实现。为了使用正确的实现,我使用一个工厂来接收参数,然后返回正确的实例。 演示代码 @Singleton public class MyF
当我运行下面的代码时,我得到输出“Bar got 1234”。看起来 Guice 找不到 num2 的绑定(bind),并隐式分配了 num1 的值。这是 AssistedInject 功能的一部分吗
我已阅读 https://github.com/google/guice/wiki/AssistedInject ,但它没有说明如何传入 AssistedInject 参数的值。 injector.g
我想在运行时使用 Hilt 为 ViewModel 提供一些依赖项。我遵循了 d.android.com this 指导的解决方案. @HiltViewModel public class Vi
我想做这样的事情: @Inject private CollectorsListHolderFactory collectorsListHolderFactory; private Collector
我正在尝试使用 Guice 3.0 AssistedInject,它不会实例化工厂。 SSCCE代码: 父类 public class ParentClass() { @Inject privat
在我的 guice 模块中,我有多个工厂,如下所示: install(new FactoryModuleBuilder().implement(SportsCar.class,Ferrari.clas
我找不到如何进行“动态辅助注入(inject)”的方法。我的意思是我想根据参数向工厂提供它需要在运行时使用的实现类名。这是我目前拥有的: interface Letter {} abstract cl
我正在使用 Guice Assisted Inject图书馆为我 build 一个工厂。我目前的设置如下: class MyObject { @Inject public MyObject(@As
我最近开始使用 Guice,需要一些帮助。 我有一个带有构造函数的类,其中包含 3 种不同的要注入(inject)的参数。下面是类 @Inject public Bullet(EntityParams
我遇到一个奇怪的错误,在使用辅助注入(inject)时我无法克服: [DEBUG] [project] - Rebinding com.gwtplatform.mvp.client.DesktopGi
什么是 Spring Framework相当于FactoryModuleBuilder , @AssistedInject , 和 @Assisted在 Google Guice ?换句话说,使用 S
我是一名优秀的程序员,十分优秀!