在Java中使用包进行通信

时间:2014-01-26 15:21:37

标签: java

我遇到了一个与Package之间的通信有关的问题。 这是一个问题,是否有可能在包中有一个列表并将此列表导入另一个包,以便我也可以在那里使用它?

这是代码:

// this is the first package where i create the list and i've create a method to return the       list
package Pack1;
import java.util.*;

public class Lexer 
  {
     public static LinkedList<Object> lst  = new LinkedList<Object>();

     public static LinkedList<Object> getList(){
        return lst;
        }
  } 

    // After this, i add objects to "lst", so the list it's full of objects.
 ///////////////////////////////////////////////////////////////////////////////

//This is the second Package. 
package Pack2;

import Pack1.*;
import java.util.*;

 public class Parse {

//In the main i tried to create a List to contain the old one ("lst") but when i use the 
    //method getList nothing happens! So toString prints nothing.

public static void main(String[] args )
   {
    LinkedList<Object> list = new LinkedList<Object>();
    list = Lexer.getList();
    list.toString();
   }

}

4 个答案:

答案 0 :(得分:1)

是的,包中的可以将列表(或任何其他对象)提供给不同包中的类。实际上,假设您在文件夹Pack1Pack2中的两个不同文件中包含这两个包,那么您的代码应该可以正常工作(由于代码样式原因,您应该使用非大写字母)

答案 1 :(得分:0)

import只允许您引用类或字段而无需使用完整的包名称。它不允许访问您已无法访问的内容。它只会缩短你的代码。

如果要将list从一个类传递到另一个类(无论是否在另一个包中),最简单的方法是调用方法并传递带有list的引用。

您正在做的是使用全局字段。虽然这可以起作用,但它通常不是一个好主意,因为它会使您的应用程序扩展和测试更加困难。

相反,我建议你避免使用可变的静态字段,而是使用实例字段。我还建议避免退回收藏品。如果您需要为列表添加字符串,请添加类似

的方法
public String listToString() {
    return list.toString();
}

答案 2 :(得分:0)

在没有看到其余代码的情况下,很难说,但我的猜测是用于填充列表的代码没有被执行,所以你只是得到了new LinkedList<Object>()。向我们展示填充列表的代码。

答案 3 :(得分:0)

一个相当奇怪的答案,但据我所知,在不同包分支的类实例之间传递引用没有问题。

包限制仅适用于类成员:方法,字段,构造函数。但是这通过引用传递对象无关,只要引用类型在不同的包中可见,例如, java.util.*课程。

关于您的问题list.toString()只返回一个字符串中的对象表示,但 以任何方式将其打印到您的控制台或任何其他我/ O。

要将其打印到控制台所需的是System.out.println( list ) Java将隐式调用toString()