我遇到了一个与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();
}
}
答案 0 :(得分:1)
是的,包中的类可以将列表(或任何其他对象)提供给不同包中的类。实际上,假设您在文件夹Pack1
和Pack2
中的两个不同文件中包含这两个包,那么您的代码应该可以正常工作(由于代码样式原因,您应该使用非大写字母)
答案 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()