gpt4 book ai didi

java - 一个方法中的多个泛型

转载 作者:行者123 更新时间:2023-12-02 15:31:40 30 4
gpt4 key购买 nike

我的主要问题是,如果通用对象通过例如扩展,我是否可以将它绑定(bind)为两种类型。 4种。如果没有例子,我真的不知道如何问这个问题。

所以我创建了一个简单游戏的小例子,其中战士或游骑兵可以装备不同类型的武器(单手、双手、近战、远程)。每个武器都有两个属性。所以例如武器类型 Dagger 扩展 Weapon 实现 OneHanded、Melee

游侠职业(可以使用双手远程武器):

    private Weapon weapon;

public <T extends TwoHanded & Ranged> void equip(T weapon) {
this.weapon = (Weapon) weapon;
}

战士类别(可以使用单手、双手、近战、远程武器):

    private Weapon weapon;
public <T extends OneHanded & Melee & Ranged> void equip(T weapon) { //probably have to do this differently
this.weapon = (Weapon) weapon;
}

弓和 Dagger 类:

public class Bow extends Weapon implements TwoHanded, Ranged {}
public class Dagger extends Weapon implements OneHanded, Melee {}

public void equipTest() {
ranger.equip(bow); //works fine
warrior.equip(dagger); //does not work
}

这里的主要问题是(我认为)我不知道如何实现战士可以装备具有不同属性的不同武器(例如弓(远程,双手)或 Dagger (近战,单手) )) 而游侠只有一种可能性。我该如何解决这个问题?

最佳答案

代码无法编译,因为 Dagger 未实现 Ranged

我认为你的意思是近战远程。这可以写成重载。

<T extends Melee & OneHanded> void equip(T weapon) {
<T extends Ranged & OneHanded> void equip(T weapon) {

请注意顺序的更改,以便重载具有明显的删除。但是,使用不同的名称比重载要好得多。

(此外,我会使用间接层,而不是丢失基本类型的类型信息。)

关于java - 一个方法中的多个泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59779356/

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