AddLinkEntry类是原始类型。对通用类型AddLinkEntry Class <t>的引用应参数化

时间:2018-09-03 09:08:43

标签: java warnings suppress-warnings

我在下面的行中抛出“ 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);
  }
}

我想知道是什么原因导致警告,以及如何在不使用禁止警告的情况下消除警告?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

Eran还指出,警告是由于直接使用原始类型“ AddLinkEntry”引起的,作为类的通用类,您应提供更具体的类型,例如Integer,String等,您希望将其实例保存在静态列表中通过Java进行类型检查,否则您只是在邀请“ Classcastexception”。

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

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

使用标记-Xlint:rawtypes