【问题标题】:Missing type arguments for generic class in Java?Java中的泛型类缺少类型参数?
【发布时间】:2022-01-21 16:52:53
【问题描述】:

我不明白如何将泛型类型格式化为这段代码:

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;
   }
}

【问题讨论】:

  • 我们需要查看产生此错误的代码,但我愿意猜测您没有为T 填写任何内容,或者您​​填写的内容拼写错误。
  • @markspace 已更新。
  • 您用采用SpiderEntity 的方法覆盖了采用T 的方法getEntityTexture

标签: java generics types


【解决方案1】:

您的子类是泛型类型,但 绑定SpiderEntity 类型

public class SpiderRenderer<T extends SpiderEntity>

你的子类是一个没有边界的泛型:

public class VariantSpiderRenderer<T> extends SpiderRenderer<T>

这意味着您正在尝试创建它,以便您可以创建某种类型的 VariantSpiderRenderer - 例如 VariantSpiderRenderer&lt;String&gt; - 与基类不兼容,基类必须是某种类型的 SpiderRenderer T至少SpiderEntity

要解决这个问题,派生类也必须尊重并指定这些边界:

public class VariantSpiderRenderer<T extends SpiderEntity> extends SpiderRenderer<T>

【讨论】:

  • :D 谢谢!!!
猜你喜欢
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
  • 2016-09-16
相关资源
最近更新 更多