AddLinkEntry类是原始类型。对泛型类型AddLinkEntry类的引用 应该参数化

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

我有以下行抛出“AddLinkEntry是一个原始类型。引用泛型类型AddLinkEntry应参数化”警告

List<AddLinkEntry> addLinkCache = new ArrayList<AddLinkEntry>();

并且有AddLinkEntry类

public class AddLinkEntry<T> {

  /**
   * Function that Adds a link between this object and given object
   */
  private IAddLinkToObjectFunctional<T> objectFunctional;

  /**
   * ID of given object
   */
  private Id id;

  /**
   * Constructs a new {AddLinkEntry<T>}.
   * 
   * @param objectFunctional
   *        Function that Adds a link between this object and given object
   * @param id
   *        ID of given object
   */
  public AddLinkEntry(IAddLinkToObjectFunctional<T> objectFunctional, Id id) {
    this.objectFunctional = objectFunctional;
    this.id = id;
  }

  /**
   * Retrieve a function that Adds a link between this object and given object
   */
  public IAddLinkToObjectFunctional<T> executeLinkage() {
    return objectFunctional;
  }

  /**
   * Retrieve an Id
   */
  public Id getId() {
    return id;
  }

  @FunctionalInterface
  public interface IAddLinkToObjectFunctional<T> {

    /**
     * Adds a link between this object and given object
     * 
     * @param objectNode a given object to link
     */
    void addLink(T objectNode);
  }
}

我想知道导致警告的原因以及如何在不使用抑制警告的情况下摆脱警告?

java warnings suppress-warnings
2个回答
1
投票

我认为您还需要将AddLinkEntry与您想要存储的类型进行参数化,例如List<AddLinkEntry<String>> addLinkCache = new ArrayList<AddLinkEntry<String>>();


1
投票

正如Eran所指出的那样警告是由于直接使用原始类型“AddLinkEntry”,作为类通用本身,你应该给出更具体的类型,如Integer,String等,你想要在列表中保存的实例用于静态类型检查java否则你只是邀请“Classcastexception”。

所以,List<AddLinkEntry<SpecificType>>将工作正常。

有关警告的详细信息,因为它可能不会出现在简单的javac中,

使用标志-Xlint:rawtypes

© www.soinside.com 2019 - 2024. All rights reserved.