【问题标题】:How to access the instance variable of an object stored in linkedlist collection?如何访问存储在链表集合中的对象的实例变量?
【发布时间】:2013-10-27 21:45:45
【问题描述】:

我正在研究集合和泛型。在我的任务中,我必须将一个人对象存储到链表集合中。然后我必须将人的年龄与我给出的值进行比较。但我无法访问存储在链表中的对象变量。

这是我的代码:

class person {
    int age;
    person(int a)
    {
       age = a;
    }
    public int getAge()
    {
         return age;
    }
}

class myList<E>
{
  LinkedList<E> list;
  myList()
  {
    list = new LinkedList<E>();
  }
  void addElement(Person p){}
  void removeElement(int index){}
  boolean compareAge(int age){
       for(E p : list){
             int a = p.getAge();
             if(a.equals(age))
             {
                return true;
             }
             else{
                return false;
             }
       }
  }

}

但是,我收到的错误是: 错误:找不到符号 p.getAge(); ^ 符号:方法 get(int) 位置:E类型的变量值 其中 E 是一个类型变量: E 扩展类 myList 中声明的 Object

【问题讨论】:

  • 当您只使用Person 对象时,为什么要使类通用?它给出这个错误是因为getAge() 没有在Object 中定义,这是唯一可接受的类型,因为这是一个泛型。没有其他可用类型的信息
  • 应该有 person 而不是 E 看到我的回答 ;-)
  • 谢谢大家,现在它正在工作,我删除了泛型,即 E。我在 LinkedList 声明中用 Person 替换了 E。我真的再次感谢大家。

标签: java generics collections


【解决方案1】:

您的代码显示“取任何类型的List,称之为E”。然后,您将关于 E 的假设强加到代码中,这是行不通的,因为 E 可以是任何东西

您需要删除通用声明,以便拥有List&lt;person&gt;。或者您可以限制您的 List 仅保留 person 或其子项:

class myList<E extends person>

注意

请使用 Java 命名约定,类是 UpperCamelCase。

【讨论】:

    【解决方案2】:

    E 是一个泛型类型。 由于您事先已经知道要存储在列表中的类型,因此您的声明应该是:

    class myList
    {
      LinkedList< person > list;
    
    ...
    

    【讨论】:

      【解决方案3】:

      你应该使用:

      class myList<E extends Person>
      

      您还必须解决其他一些问题(在 int 上等于,在类 Person 上是 'p')。

      【讨论】:

        【解决方案4】:

        你应该有人而不是 E。 链表列表...
        但我也认为全班通用并不重要。
        DOCUMENTATION to the list

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-09-15
          • 1970-01-01
          • 2022-10-02
          • 1970-01-01
          • 2021-08-25
          • 2017-05-24
          • 1970-01-01
          相关资源
          最近更新 更多