该方法必须重写或实现一个父类型的方法。

16

我正在制作自定义盔甲,在我的盔甲类中,我遇到了这个错误:

类型ArmorE的getArmorTexture(ItemStack、Entity、int、int)方法必须覆盖或实现一个超类型方法

为什么会出现这个错误?

这是我的代码:

盔甲类:

package com.domoq.EmeraldGear.armor;

import com.domoq.EmeraldGear.EmeraldGearMod;

import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;

public class ArmorE extends ItemArmor {

    public ArmorE(ArmorMaterial part2ArmorE, int part3, int part4) {
        super(part2ArmorE, part3, part4);
        this.setCreativeTab(CreativeTabs.tabCombat);
    }

    @Override
    public String getArmorTexture(ItemStack stack, Entity entity, int slot, int type) {
        if (stack.getItem() == EmeraldGearMod.EmeraldHelmet || stack.getItem() == EmeraldGearMod.EmeraldChest || stack.getIconIndex() == EmeraldGearMod.EmeraldBoots) {
            return "emeraldgearmod:textures/models/armor/ArmorL1.png";
        } else if (stack.getItem() == EmeraldGearMod.EmeraldLegs) {
            return "emeraldgearmod:textures/models/armor/ArmorL2.png";
        } else return null;
    }
}

主类的一部分:

//Armor Material
public static ArmorMaterial ArmorE = EnumHelper.addArmorMaterial("AEmerald", 29, new int[]{3, 7, 4, 2}, 25);

//Armor Items
public static Item EmeraldHelmet = new ArmorE(ArmorE, 2, 0).setUnlocalizedName("EmeraldHelmet").setTextureName("emeraldgearmod:emerald_helmet");
public static Item EmeraldChest = new ArmorE(ArmorE, 2, 1).setUnlocalizedName("EmeraldChest").setTextureName("emeraldgearmod:emerald_chestplate");
public static Item EmeraldLegs = new ArmorE(ArmorE, 2, 2).setUnlocalizedName("EmeraldLegs").setTextureName("emeraldgearmod:emerald_leggings");
public static Item EmeraldBoots = new ArmorE(ArmorE, 2, 3).setUnlocalizedName("EmeraldBoots").setTextureName("emeraldgearmod:emerald_boots");

4
它应该覆盖/实现哪个超类型方法?如果没有,请删除 @Override。 如果有一个,则更正签名,使其正确匹配。 - user2864740
12个回答

36

如果您正在使用Eclipse,请尝试关闭并重新打开它。错误将消失。


8
尽管此答案被点踩,但(可悲的是)对于 Eclipse 问题而言,这通常是一个有效的答案。 - gdbj
1
这个对我起作用了。我会投票选这个作为最正确的答案。 - Trixie the Cat
2
2021年3月,这就是帮助的答案。 - Jay
1
2021年10月,这仍然是解决方案,哈哈。谢谢。 - redbite
1
2023年3月 - 运作得非常顺利。哈哈 - user258959
显示剩余3条评论

15

要重写一个方法,其签名需要与父类的签名匹配。替换即可。

public String getArmorTexture(ItemStack stack, Entity entity, int slot, int type) {

随着

public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) {

你在哪里找到了超类方法的签名? - nanofarad
你需要打开ItemArmor类并查看你要重写的方法的参数类型和返回类型。复制粘贴通常是最好的选择,以确保它接受相同的变量。在这种情况下,你的版本正在使用int作为“type”参数,而不是字符串。 - Robert Rapplean
通常您可以参考Javadocs——此处链接已失效,但已经更正的代码仍然存在 :) - Reimeus
谢谢@Reimeus。我忘记添加方法参数了,在添加后它就可以工作了。 - Himanshu Suthar

14

这意味着你不需要使用 override 标注,因为你并没有覆盖或实现该方法的任何内容。因此,你只需要删除它即可。

@Override

正确 - 这对我很有帮助;因为我的方法签名已经与父接口匹配(例如,如被接受的答案所建议)。谢谢! - Reece
我刚在 Eclipse 上得到了这个并且对我有效。非常感谢。 - 猫IT

4
我是通过谷歌搜索来到这里的,虽然这不会帮助提问者(因为显然他们的问题已在被接受的答案中解决了),但我想分享一下我未来可能遇到的问题。
我快要疯了——我正在使用 Jetty 并且有一个方法根本不接受 Override 注释。 我甚至从基类复制和粘贴了它以确保我没有弄乱方法签名。 尽管许多答案说要忽略它,因为它是 WebSocket 的入口点而且它没有触发。 显然,我不能忽视它!
最后问题出现在导入中——我从错误的包(Jetty 包)中导入 Session,所以看起来很合法,但我需要 org.eclipse.jetty.websocket.api.Session,而我导入了 org.eclipse.jetty.server.session.Session。未来的访客可能不会拥有这种不匹配的包导入组合,但我怀疑有些人会像我一样遇到这个问题。

1

在Eclipse IDE中使用的包,可以通过Ctrl+S保存每个类。


1
真是个愚蠢的错误)) 我花了大约20分钟才弄清楚发生了什么。我刚写的接口没有保存,因此在IDE中看不到。 - Zephyr Zephyroff

0

在您的项目上右键单击

  1. 进入构建路径 --> 配置构建路径
  2. 在左侧面板中进入Java编译器
  3. 取消选中JDK兼容性
  4. 选择最新的编译器兼容性级别
  5. 应用并关闭
  6. 通过maven更新更新项目
  7. 错误将消失

2
这个问题与错误的合规水平无关(也可能是另一种错误)...而是与错误的参数类型有关(正如我们从接受的答案中可以看出,这已经有将近10年了...最好花时间[正确地]回答实际/开放/未回答的问题)。 - undefined

0
在你定义的接口ItemArmor中,删除尖括号中的任何通用类型。

0

你可能有未保存的内容在Interface或者Base-Class中。这就是为什么删除注解@Override可以清除错误。


0

如果您已经确认超类/接口的签名匹配,但仍然出现错误,请尝试先保存超类/接口。


0

如果您确定在超类中没有同名的函数,那么可能是因为您的代码中有一个被隐藏的 @Override(未被使用)。

我曾经注释掉了一个被覆盖的函数,这让 IDE 感到困惑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接