Java 中的泛型 class 缺少类型参数?
Missing type arguments for generic class in Java?
我不明白如何将泛型类型格式化为这段代码:
import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.renderer.entity.SpiderRenderer;
import net.minecraft.entity.monster.SpiderEntity;
import net.minecraft.util.ResourceLocation;
import vazkii.quark.content.client.module.VariantAnimalTexturesModule;
import vazkii.quark.content.client.module.VariantAnimalTexturesModule.VariantTextureType;
public class VariantSpiderRenderer<T> extends SpiderRenderer<T> {
public VariantSpiderRenderer(EntityRendererManager renderManagerIn) {
super(renderManagerIn);
}
@Override
public ResourceLocation getEntityTexture(SpiderEntity entity) {
return VariantAnimalTexturesModule.getTextureOrShiny(entity, VariantTextureType.SPIDER, VariantAnimalTexturesModule.enableSpider);
}
}
这是我得到的错误:
public class VariantSpiderRenderer extends SpiderRenderer {
^
missing type arguments for generic class SpiderRenderer<T>
where T is a type-variable:
T extends SpiderEntity declared in class SpiderRenderer
error: warnings found and -Werror specified
warnings found and -Werror specified
我一直在谷歌搜索,试图弄清楚如何修复它,但我不明白。
这是您在评论中要求的代码吗?
package net.minecraft.client.renderer.entity;
import net.minecraft.client.renderer.entity.layers.SpiderEyesLayer;
import net.minecraft.client.renderer.entity.model.SpiderModel;
import net.minecraft.entity.monster.SpiderEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public class SpiderRenderer<T extends SpiderEntity> extends MobRenderer<T, SpiderModel<T>> {
private static final ResourceLocation SPIDER_TEXTURES = new ResourceLocation("textures/entity/spider/spider.png");
public SpiderRenderer(EntityRendererManager renderManagerIn) {
super(renderManagerIn, new SpiderModel<>(), 0.8F);
this.addLayer(new SpiderEyesLayer<>(this));
}
protected float getDeathMaxRotation(T entityLivingBaseIn) {
return 180.0F;
}
/**
* Returns the location of an entity's texture.
*/
public ResourceLocation getEntityTexture(T entity) {
return SPIDER_TEXTURES;
}
}
你的 subclass 是一个通用类型,但是 bound 是 SpiderEntity
类型
public class SpiderRenderer<T extends SpiderEntity>
你的子class是一个没有边界的通用类型:
public class VariantSpiderRenderer<T> extends SpiderRenderer<T>
这意味着您正在尝试创建它,以便您可以创建某种类型的 VariantSpiderRenderer
- 例如 VariantSpiderRenderer<String>
- 与基础 class 不兼容,它是必须是某种类型 T
的 SpiderRenderer
,即 至少 一个 SpiderEntity
.
要解决此问题,派生的 class 也必须遵守并指定这些界限:
public class VariantSpiderRenderer<T extends SpiderEntity> extends SpiderRenderer<T>
我不明白如何将泛型类型格式化为这段代码:
import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.renderer.entity.SpiderRenderer;
import net.minecraft.entity.monster.SpiderEntity;
import net.minecraft.util.ResourceLocation;
import vazkii.quark.content.client.module.VariantAnimalTexturesModule;
import vazkii.quark.content.client.module.VariantAnimalTexturesModule.VariantTextureType;
public class VariantSpiderRenderer<T> extends SpiderRenderer<T> {
public VariantSpiderRenderer(EntityRendererManager renderManagerIn) {
super(renderManagerIn);
}
@Override
public ResourceLocation getEntityTexture(SpiderEntity entity) {
return VariantAnimalTexturesModule.getTextureOrShiny(entity, VariantTextureType.SPIDER, VariantAnimalTexturesModule.enableSpider);
}
}
这是我得到的错误:
public class VariantSpiderRenderer extends SpiderRenderer {
^
missing type arguments for generic class SpiderRenderer<T>
where T is a type-variable:
T extends SpiderEntity declared in class SpiderRenderer
error: warnings found and -Werror specified
warnings found and -Werror specified
我一直在谷歌搜索,试图弄清楚如何修复它,但我不明白。
这是您在评论中要求的代码吗?
package net.minecraft.client.renderer.entity;
import net.minecraft.client.renderer.entity.layers.SpiderEyesLayer;
import net.minecraft.client.renderer.entity.model.SpiderModel;
import net.minecraft.entity.monster.SpiderEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public class SpiderRenderer<T extends SpiderEntity> extends MobRenderer<T, SpiderModel<T>> {
private static final ResourceLocation SPIDER_TEXTURES = new ResourceLocation("textures/entity/spider/spider.png");
public SpiderRenderer(EntityRendererManager renderManagerIn) {
super(renderManagerIn, new SpiderModel<>(), 0.8F);
this.addLayer(new SpiderEyesLayer<>(this));
}
protected float getDeathMaxRotation(T entityLivingBaseIn) {
return 180.0F;
}
/**
* Returns the location of an entity's texture.
*/
public ResourceLocation getEntityTexture(T entity) {
return SPIDER_TEXTURES;
}
}
你的 subclass 是一个通用类型,但是 bound 是 SpiderEntity
public class SpiderRenderer<T extends SpiderEntity>
你的子class是一个没有边界的通用类型:
public class VariantSpiderRenderer<T> extends SpiderRenderer<T>
这意味着您正在尝试创建它,以便您可以创建某种类型的 VariantSpiderRenderer
- 例如 VariantSpiderRenderer<String>
- 与基础 class 不兼容,它是必须是某种类型 T
的 SpiderRenderer
,即 至少 一个 SpiderEntity
.
要解决此问题,派生的 class 也必须遵守并指定这些界限:
public class VariantSpiderRenderer<T extends SpiderEntity> extends SpiderRenderer<T>