簡體   English   中英

Java軟件包無法編譯

[英]Java Package Won't Compile

我認為我對如何設置Java軟件包的理解可能會有所遺漏,因為我無法編譯我的軟件包。 我有3個班級文件。 我的目錄如下:... Documents \\ jsjf,其中包含:ArrayStack.java和StackADT.java。 在jsjf目錄中,我還有一個文件夾“ EmptyCollectionException”,其中包含EmptyCollectionException.java。 我可以編譯EmptyCollectionException.java和StackADT.java,但是當我嘗試編譯ArrayStack.java時,出現以下錯誤消息(請參閱鏈接): http ://i.stack.imgur.com/koJ8P.jpg

這是每個文件的代碼各部分的頂部。 有誰知道這是什么問題。 為什么ArrayStack無法導入包?

對於ArrayStack.java

package jsjf;



import jsjf.EmptyCollectionException;
import java.util.Arrays;

public class ArrayStack<T> implements StackADT<T>
{
   private final int DEFAULT_CAPACITY = 100;
   private int top;
   private T[] stack;



   //-----------------------------------------------------------------
   //  Creates an empty stack using the specified capacity.
   // Note top is now initialized at -1 so that when first
   // element is added an top is decremented, top will equal 0
   // corresponding to the array index of the first element.
   //-----------------------------------------------------------------
   public ArrayStack(int initialCapacity)
   {
      top = -1;
      stack = (T[]) (new Object[initialCapacity]);
   }

   //-----------------------------------------------------------------
   //  Creates an empty stack using the default capacity.
   //-----------------------------------------------------------------
   public ArrayStack()
   {
      this(DEFAULT_CAPACITY);
   }


//Rest of code.......

對於EmptyCollectionException.java:

package jsjf.exceptions;


public class EmptyCollectionException extends RuntimeException
{
    /**
     * Sets up this exception with an appropriate message.
     * @param collection the name of the collection
     */
    public EmptyCollectionException(String collection)
    {
        super("The " + collection + " is empty.");
    }
}

對於StackADT:

package jsjf;


public interface StackADT<T>
{
    /**  
     * Adds the specified element to the top of this stack. 
     * @param element element to be pushed onto the stack
     */

    //Rest of Code

首先,程序包名稱不應以大寫字母開頭。 這將有助於您看到jsjf.EmptyCollectionException不在層次結構中指向類,而是指向包。 因此,根據Java命名約定重命名程序包后,正確的導入應為:

import jsjf.emptyCollecionException.EmptyCollectionException

在您的異常類中,您使用另一個包名稱( exceptions )。 程序包名稱應與父目錄的名稱匹配。 因此,我將包含EmptyCollectionException的目錄重命名為exception並修復ArrayStack的導入。

最后,強烈建議您在手動編譯一些類以了解其工作原理時使用IDE。 IDE將幫助您進行導入,編譯和許多其他操作

您的代碼說您希望EmptyCollectionException位於包jsjf ,但您說該類存在於子文件夾中,該子文件夾在包層次結構中更深(並且與Java命名約定相反,在Java命名約定中,包名稱通常不使用駝峰式)。

EmptyCollectionException類代碼說,這是在jsjf.exceptions包,這意味着(一)它應該是在exceptions下的文件夾jsjf文件夾,您的進口EmptyCollectionException應該是import jsjf.exceptions. EmptyCollectionException import jsjf.exceptions. EmptyCollectionException

編譯時還需要放在一個合理的位置,例如,documents文件夾,因為程序包將位於“編譯源”下面。 就個人而言,我會將其放置在Windows文檔文件夾下某個更合理的文件夾位置,最好不要使用空格。

暫無
暫無

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

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