Java “没有简单的方法”;包括「;在爪哇?

Java “没有简单的方法”;包括「;在爪哇?,java,import,insert,include,extend,Java,Import,Insert,Include,Extend,当逻辑上某件事情看起来非常简单时,它就变得非常复杂 我很少使用Java,请原谅我的无知。以下是我试图做的: 我在一个.java文件中有一个很好的干净算法,我想从一个初始化的数组中获取它。该数组包含40000多个元素,因此我希望它单独保存在一个文件中。我该怎么做?是否真的没有快速的方法说{insert contents of filename.txt here}?使算法方法静态,这样您就可以通过对象whateverItReturns=NameOfClass.nameOfStaticMethod(a

当逻辑上某件事情看起来非常简单时,它就变得非常复杂

我很少使用Java,请原谅我的无知。以下是我试图做的:


我在一个.java文件中有一个很好的干净算法,我想从一个初始化的数组中获取它。该数组包含40000多个元素,因此我希望它单独保存在一个文件中。我该怎么做?是否真的没有快速的方法说{insert contents of filename.txt here}?

使算法方法
静态
,这样您就可以通过
对象whateverItReturns=NameOfClass.nameOfStaticMethod(args)调用它


内容导入通常可以通过多种方式完成,具体取决于要导出的内容类型和更新方式,这是选择正确方式的关键。

使算法方法
静态
,这样您可以通过
对象whateverItReturns=NameOfClass.nameOfStaticMethod(args)调用它

内容导入通常可以通过多种方式完成,具体取决于您想要导出的内容类型和更新方式,这是选择正确方式的关键。

File1.java:

class File1 {
    static int[] bigArray = {1,2,3};
}
File2.java:

class File2 {
    static int main(String[] args) {
        doSomeThingWith(File1.bigArray);
    }
}
您也可以使用静态导入来使用bigArray,而无需预先添加
File1。

File1.java:

class File1 {
    static int[] bigArray = {1,2,3};
}
File2.java:

class File2 {
    static int main(String[] args) {
        doSomeThingWith(File1.bigArray);
    }
}

您还可以使用静态导入来使用bigArray,而无需预先添加
File1。

Java中的基本代码单位是类,而不是文件。导入文件毫无意义,这是错误的抽象级别。不要再考虑文件了——想想不同类中的代码以及如何调用这些代码。类在哪个文件中定义(而且它根本不必是文件!)并不重要

顺便说一句,对于40000个元素,如果您直接在代码中定义它们,您可能会遇到方法大小的限制。最好将数据放入文本文件并对其进行解析。这样,在更改数据时也不必重新编译任何内容


编辑:为文件编写解析器的另一种方法是计算一次数据,将其放入适当的Java数据结构(数组、列表、映射等),然后使用ObjectOutputStream将其序列化到文件中。请注意,如果数据存储在后来更改其签名的类中,这将导致问题。

Java中的基本代码单元是类,而不是文件。导入文件毫无意义,这是错误的抽象级别。不要再考虑文件了——想想不同类中的代码以及如何调用这些代码。类在哪个文件中定义(而且它根本不必是文件!)并不重要

顺便说一句,对于40000个元素,如果您直接在代码中定义它们,您可能会遇到方法大小的限制。最好将数据放入文本文件并对其进行解析。这样,在更改数据时也不必重新编译任何内容

编辑:为文件编写解析器的另一种方法是计算一次数据,将其放入适当的Java数据结构(数组、列表、映射等),然后使用ObjectOutputStream将其序列化到文件中。请注意,如果数据存储在以后更改其签名的类中,这将导致问题。

否,Java中没有“包含”功能。C世界中已知的预处理器没有包括在内,过了一段时间,结果证明它可以生成更健壮的程序(在我看来)

您需要创建一个包含所需内容的新类,然后引用它。Java6允许静态导入,这使得它几乎是透明的

请注意,您可能会面临达到单个类的最大字节码大小的风险。我相信是64KB。

不,Java中没有“包含”功能。C世界中已知的预处理器没有包括在内,过了一段时间,结果证明它可以生成更健壮的程序(在我看来)

您需要创建一个包含所需内容的新类,然后引用它。Java6允许静态导入,这使得它几乎是透明的


请注意,您可能会面临达到单个类的最大字节码大小的风险。我相信它是64KB。

在Java平台中,不预处理.Java文件是一个经过深思熟虑的设计决策。这使事情变得简单,而简单就是Java的全部


正如其他人所建议的,使用静态导入。有时它感觉有局限性,但不必调试C风格的宏地狱是很好的。

在Java平台上,不预处理.Java文件是一个深思熟虑的设计决策。这使事情变得简单,而简单就是Java的全部


正如其他人所建议的,使用静态导入。有时它感觉有局限性,但不用调试C风格的宏地狱真是太棒了。

请先阅读Michael Borgwardt的答案,这正是我想说的

如果您需要一些素数,可以随时计算:

/** Sieve of Eratosthenes. Return primes <= max */
static Integer[] getSoE(int max) {
    if (max < 1) return new Integer[0];

    BitSet sieve = new BitSet(max / 2);
    ArrayList<Integer> list = new ArrayList<Integer>();
    if (max > 1) list.add(2);
    if (max > 2) list.add(3);

    for (int i = 5, f = 1; i <= max; i += 3 - f, f = -f)
        if (sieve.get(i >> 1) == false) {
            for (int add, j = i + (add = i << 1); j < max; j += add)
                sieve.set(j >> 1, true);
            list.add(i);
        }

    return list.toArray(new Integer[0]);
}
/**Eratosthenes筛。返回素数1)列表。添加(2);
如果(最大值>2)列表。添加(3);
对于(inti=5,f=1;i>1)==false){
对于(int-add,j=i+(add=i>1,true);
列表.添加(i);
}
返回list.toArray(新整数[0]);
}
假设要从文件中读取它们:

static Integer[] getPrimeFromFile(String Filename) throws FileNotFoundException {
    ArrayList<Integer> list = new ArrayList<Integer>();

    Scanner sc = new Scanner(new File(Filename));
    while (sc.hasNext())
        list.add(sc.nextInt());
    sc.close();

    return list.toArray(new Integer[0]);
}
静态整数[]getPrimeFromFile(字符串文件名)抛出FileNotFoundException{
ArrayList=新建ArrayList();
Scanner sc=新扫描仪(新文件(文件名));
while(sc.hasNext())
添加(sc.nextInt());
sc.close();
返回list.toArray(新整数[0]);
}

请先阅读迈克尔·博格沃德的答案,这正是我想说的

如果您需要一些素数,可以随时计算:

/** Sieve of Eratosthenes. Return primes <= max */
static Integer[] getSoE(int max) {
    if (max < 1) return new Integer[0];

    BitSet sieve = new BitSet(max / 2);
    ArrayList<Integer> list = new ArrayList<Integer>();
    if (max > 1) list.add(2);
    if (max > 2) list.add(3);

    for (int i = 5, f = 1; i <= max; i += 3 - f, f = -f)
        if (sieve.get(i >> 1) == false) {
            for (int add, j = i + (add = i << 1); j < max; j += add)
                sieve.set(j >> 1, true);
            list.add(i);
        }

    return list.toArray(new Integer[0]);
}
/**Eratosthenes筛。返回素数1)列表。添加(2);
如果(最大值>2)列表。