我正在制作定制盔甲,在我的盔甲类中我收到此错误:
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");
如果您使用的是 Eclipse,请尝试关闭并再次打开它。错误消失。
要重写方法,签名需要与超类的签名相匹配。更换
public String getArmorTexture(ItemStack stack, Entity entity, int slot, int type) {
与
public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) {
这意味着您不需要覆盖注释,因为您没有覆盖或实现该方法的某些内容。因此,您只需删除
@Override
我是通过谷歌搜索带到这里的,虽然这对OP没有帮助(因为显然他们的问题在接受的答案中得到了解决),但我想与未来潜在的访问者分享我的问题。
我失去了理智——我正在使用 Jetty,并且有一种方法不接受 Override 注释。我什至从基类复制并粘贴它,以确保我没有以某种方式破坏方法签名。虽然许多答案都说忽略它,但它是 Websocket 的入口点并且它没有触发 - 显然,我不能忽略它!
它最终成为导入 - 我从错误的包导入会话 - 从 Jetty 包,所以它看起来确实合法,但我需要有
org.eclipse.jetty.websocket.api.Session
,而我的导入中有 org.eclipse.jetty.server.session.Session
。未来的访客不太可能拥有那对不匹配的进口包裹,但我怀疑其中一些会在我刚刚乘坐的船上。
保存您在 Eclipse IDE 中使用的包中的每个类 Ctrl+S
在定义的 ItemArmor 接口中删除尖括号中的任何通用类型。
如果您正在使用 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>
您可能在接口或基类中有未保存的内容。这就是为什么删除注释
@Override
可以清除错误。
如果您已检查超类/接口的签名是否匹配,但仍然出现错误。首先尝试保存超类/接口。
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");
}
});
我花了一段时间才找到解决方案,因为错误消息似乎没有谈到这一点。
如果您确定超类中没有同名的函数,则可能是因为您的代码中隐藏了上面的@Override(未使用)。
我注释掉了一个被重写的函数,这让 IDE 感到困惑。
右键单击您的项目