Java包无法编译

时间:2015-08-18 00:39:29

标签: java collections compiler-errors package

我认为我对如何设置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

2 个答案:

答案 0 :(得分:1)

您的代码表示您希望EmptyCollectionException位于包jsjf中,但您可以说该类存在于子文件夹中,它在包层次结构中更深(并且与Java命名约定相反)包装名称通常不是骆驼装的。

您的EmptyCollectionException班级代码在jsjf.exceptions包中说明了,这意味着(a)它应该位于exceptions文件夹下的jsjf文件夹中,您导入的EmptyCollectionException应为import jsjf.exceptions. EmptyCollectionException

在编译时,您还需要处于合理的位置,例如,您的文档文件夹,因为软件包将存在&#34;在&#34;下面#34;你正在编译的地方。就个人而言,我将它放在一个更合理的文件夹位置,最好没有空格,不在Windows文档文件夹下。

答案 1 :(得分:1)

首先,包名称不应以大写字母开头。它会帮助您看到jsjf.EmptyCollectionException不指向层次结构中的类而是指向包。因此,在根据Java命名约定重命名包之后,正确的导入应该是:

import jsjf.emptyCollecionException.EmptyCollectionException

在您的异常类中,您使用另一个包名称(exceptions)。包名称应与父目录的名称匹配。因此,我要将包含EmptyCollectionException的目录重命名为exception,并在ArrayStack中修复导入。

最后,我强烈建议您在手动编译某些类时使用IDE,以了解其工作原理。 IDE将帮助您进行导入,编译和许多其他事情