在Java中有没有一种简单的方法来"包含"?
在Java中,代码的基本单元是类,而不是文件。导入文件根本就没有意义,这是错误的抽象级别。停止考虑文件,而是考虑不同类中的代码以及如何调用该代码。类定义所在的文件(甚至可以不是文件!)并不重要。
顺便说一下,如果直接在代码中定义40,000个元素,可能会遇到方法大小的限制。最好将数据放入文本文件中并进行解析。这样,当您更改数据时,也不必重新编译任何内容。
解析文件的替代方法是先计算数据,然后将其放入适当的Java数据结构(数组、列表、映射等),最后使用ObjectOutputStream将其序列化到文件中。请注意,如果数据存储在以后更改其签名的类中,这将会引起问题。
有趣,它就像*nix哲学的对立面。数组大小约为140K。这是否会导致问题?这是从1到550,000的质数间隔列表,所以希望它永远不会改变。
方法的大小限制为64K,其中包括指令,所以是的,这太大了。你可以将它分成几个方法,但仍然很丑陋。数据可能不会改变,但您可能仍然想要扩展它。
我喜欢序列化的想法,但在这个应用程序中不适用。数组的起始点取决于用户想要分解的数字,然后从那里可以根据数字在两个方向上遍历数组,然后在两个方向上不断遍历(数据集是对称的,所以我丢弃了一半),直到找到因子。序列化文件的大小可能为sqrt(2^64)。我得到了下面100k以下的数据集,但对于我的Java版本,我创建了一个新的数据集,没有使用数字17。现在它只有6k。
我真的不明白为什么你认为序列化行不通。你正在内存中创建数据结构-写入到磁盘中的确切数据结构会有什么问题?
我的想法是:1)序列化对于每个程序运行都是定制的,2)序列化非常大,3)磁盘缓存速度慢。然而,我想我误解了你的真正意思。我现在认为你是在谈论将整个文件一次性读入内存(每次程序运行一次),这将产生与您最初的通过代码初始化的计划相同的结果,并且可能会稍微更快一些。
Java中没有直接包含(include)其他文件的功能,这导致在不同的Java文件之间共享变量或方法时需要特殊处理。上面的代码示例中,File2.java需要使用File1.java中定义的bigArray数组。
解决方法之一是将bigArray声明为public static,这样在其他文件中可以直接访问该数组。但这样做会导致不严谨的编程实践,因为其他文件可以直接修改bigArray数组,违背了封装性原则。
另一种解决方法是使用static import关键字。通过在File2.java文件中添加import static File1.bigArray;
语句,我们可以直接使用bigArray数组,而无需在使用时添加File1前缀。
通过使用static import,我们可以更方便地使用其他文件中的静态成员,避免了繁琐的前缀添加。但需要注意的是,过度使用static import可能会导致代码可读性下降,因此仍需谨慎使用。