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中。该项目的