该方法必须重写或实现超类型方法

问题描述 投票:0回答:12

我正在制作定制盔甲,在我的盔甲类中我收到此错误:

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");
java minecraft minecraft-forge
12个回答
36
投票

如果您使用的是 Eclipse,请尝试关闭并再次打开它。错误消失。


15
投票

要重写方法,签名需要与超类的签名相匹配。更换

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

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

14
投票

这意味着您不需要覆盖注释,因为您没有覆盖或实现该方法的某些内容。因此,您只需删除

@Override

4
投票

我是通过谷歌搜索带到这里的,虽然这对OP没有帮助(因为显然他们的问题在接受的答案中得到了解决),但我想与未来潜在的访问者分享我的问题。

我失去了理智——我正在使用 Jetty,并且有一种方法不接受 Override 注释。我什至从基类复制并粘贴它,以确保我没有以某种方式破坏方法签名。虽然许多答案都说忽略它,但它是 Websocket 的入口点并且它没有触发 - 显然,我不能忽略它!

它最终成为导入 - 我从错误的包导入会话 - 从 Jetty 包,所以它看起来确实合法,但我需要有

org.eclipse.jetty.websocket.api.Session
,而我的导入中有
org.eclipse.jetty.server.session.Session
。未来的访客不太可能拥有那对不匹配的进口包裹,但我怀疑其中一些会在我刚刚乘坐的船上。


1
投票

保存您在 Eclipse IDE 中使用的包中的每个类 Ctrl+S


0
投票

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


0
投票

如果您正在使用 Java Spring 框架,那么您必须通过在

<context:annotation-config/>
文件中写入
config.xml
来提供注释的使用,以便能够使用注释,例如
@Override
@Component
@Value
和等等

右键单击您的包并创建一个 .xml(即 config.xml)文件用于配置(如果不存在)。

并在其中添加以下代码。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- This allows annotations -->
    <context:annotation-config />


</beans>

0
投票

您可能在接口或基类中有未保存的内容。这就是为什么删除注释

@Override
可以清除错误。


0
投票

如果您已检查超类/接口的签名是否匹配,但仍然出现错误。首先尝试保存超类/接口。


0
投票

OP 的问题已经解决,但对于未来的访问者,我想说我遇到了这个错误,问题出在类型参数上。

而不是

field.addValueChangeHandler(new ValueChangeHandler<FieldType>() {
        @Override
        public void onValueChange(ValueChangeEvent<FieldType> event) {
            Window.alert("[DEBUG] I'm here");
        }
    });

我应该写

field.addValueChangeHandler(new ValueChangeHandler<String>() {
        @Override
        public void onValueChange(ValueChangeEvent<String> event) {
            Window.alert("[DEBUG] I'm here");
        }
    });

我花了一段时间才找到解决方案,因为错误消息似乎没有谈到这一点。


0
投票

如果您确定超类中没有同名的函数,则可能是因为您的代码中隐藏了上面的@Override(未使用)。

我注释掉了一个被重写的函数,这让 IDE 感到困惑。


0
投票

右键单击您的项目

  1. 转到 构建路径 --> 配置构建路径
  2. 在左侧面板中转到 Java 编译器
  3. 取消勾选JDK合规性
  4. 选择最后一个或最新的编译器合规级别
  5. 申请并关闭
  6. 从maven更新更新项目
  7. 错误将会消失
© www.soinside.com 2019 - 2024. All rights reserved.