簡體   English   中英

找不到符號-方法(通用方法)

[英]Can't find symbol - method (generic method)

我有兩節課。 一個是詞組,

import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("unchecked")
public class Phrase
{
    List<String> papers = new ArrayList();
    String name = "";
    boolean multiple = false;

    public Phrase(String name, List list)
    {
        this.name = name;
        this.papers = list;
        if(list.size() > 1)
        {
             multiple = true;
        }
    }

    public Phrase(String name, String pName)
    {
        this.name = name;
        this.papers.add(pName);
        multiple = false;
    }

    public void addPaper(String paper)
    {
        papers.add(paper);
        multiple = true;
    }

    public String getPhrase()
    {
        return name;
    }

    public List<String> getPapers()
    {
         return papers;
    }
}

另一個是KeyedLinkedList。

public class KeyedLinkedList<K,Phrase>
{
    private KeyNode first;
    private int size;

    private class KeyNode
    {
        K key;
        Phrase value;
        KeyNode previous;
        KeyNode next;

        public KeyNode(K key, Phrase value, KeyNode previous, KeyNode next)
        {
            this.key = key;
            this.value = value;
            this.previous = previous;
            this.next = next;
        }
    }

    public int size()
    {
        return size;
    }

    public boolean put(K key, Phrase val)
    {
        if(isEmpty())
        {
            first = new KeyNode(key, val, null, null);
            first.next = first;
            first.previous = first;
            size++;
            return true;
        }
        KeyNode temp = first;
        if(temp.key.equals(key))
        {

                //****ERROR LOCATION****//
            temp.value.addPaper(val.getPapers().get(0));
                //****ERROR LOCATION****//

            if(temp.value.getPapers().size() < 3)
                return false;
            return true;
        }
        temp = temp.next;
        while(temp != first)
        {
            if(temp.key.equals(key))
            {
                temp.value.addPaper(val.getPapers().get(0));
                if(temp.value.getPapers().size() < 3)
                    return false;
                return true;
            }
            temp = temp.next;
        }
        temp.previous.next = new KeyNode(key, val, temp.previous.next, first);
        first.previous = temp.previous.next;
        size++;
        return true;
    }
}

當我對此進行編譯時,出現錯誤:“找不到符號-方法getPapers()”

我的短語類中顯然有getPapers()方法,而參數中的val是短語對象。 我想知道我需要做什么來解決此問題。 該錯誤在put方法的一半發生。

public class KeyedLinkedList<K,Phrase>
//                             ^^^^^^

在這里,您要聲明一個類型變量,該變量與Phrase類具有相同的名稱並對其進行陰影處理。 Phrase類型聲明的任何變量都引用此類型變量,而不是Phrase類。

由於我不知道您的意圖是什么,因此我只能建議刪除該內容。

public class KeyedLinkedList<K>

順便說一句,不要這樣做:

List<String> papers = new ArrayList();
//                        ^^^^^^^^^

這稱為原始類型 ,很糟糕,沒有理由使用它。 而是執行new ArrayList<String>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM