Java中包之间的通信

Java中包之间的通信,java,Java,我有一个问题与包之间的通信有关。 这是一个问题,是否有可能在一个包中有一个列表,并将此列表导入另一个包中,以便我也可以在那里使用它 代码如下: // 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 sta

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

代码如下:

// 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();
   }

}
//这是我创建列表的第一个包,我创建了一个返回列表的方法
包装1;
导入java.util.*;
公共类Lexer
{
public static LinkedList lst=new LinkedList();
公共静态LinkedList getList(){
返回lst;
}
} 
//在这之后,我将对象添加到“lst”,因此列表中充满了对象。
///////////////////////////////////////////////////////////////////////////////
//这是第二个包裹。
包装包装2;
进口包装1。*;
导入java.util.*;
公共类解析{
//大体上,我试图创建一个包含旧列表(“lst”)的列表,但是当我使用
//方法getList nothing!因此toString不会打印任何内容。
公共静态void main(字符串[]args)
{
LinkedList=新建LinkedList();
list=Lexer.getList();
list.toString();
}
}

是的,包中的类可以向不同包中的类提供列表(或任何其他对象)。事实上,您的代码应该可以工作,假设您在文件夹
Pack1
Pack2
中的两个不同文件中有这两个包(出于代码样式的原因,您应该使用非大写)

import
只允许您引用类或字段,而无需使用完整的包名。它不会让你访问你以前没有访问权限的东西。它只会使代码更短

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

您所做的是使用全局字段。虽然这样做可以奏效,但这通常不是一个好主意,因为这会使扩展和测试应用程序变得更加困难

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

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

如果看不到其余的代码,很难说,但我猜你用来填充列表的代码没有被执行,所以你只是得到了一个
newlinkedlist()
。向我们展示填充列表的代码。

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

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

关于您的问题,
list.toString()
仅返回字符串形式的对象表示,但不会以任何方式将其打印到控制台或任何其他I/O


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

是否可以在一个包中包含一个列表并将此列表导入到另一个包中?否,因为您不能在一个包中包含列表:PWhy您有两个用于此目的的包?你应该在同一个包上有两个类谢谢你的回答,但对我来说这是第一次在Stackoverflow上,所以我可以问你为什么我不能在包中有一个列表吗?你的代码有什么问题吗?它不起作用没有告诉我们任何事情。你有错误吗?它以什么方式不起作用?对不起,非国会议员,但我现在已经修改了代码,无论如何,我必须以这种方式存储我的程序,一个主目录,其中包含解析包和Lexer PackageNo担心caps;)至于目录,据我所知,你别无选择。包声明必须与目录结构相匹配,因此您需要每个类的位置。我认为它们是,因为Lexer在Pack1中,Parse在Pack2中,Pack1和2在main Dir中。该项目的