gpt4 book ai didi

java - 使用与 Eclipse 中的其他版本不同的编译器合规性版本来编译类

转载 作者:行者123 更新时间:2023-11-30 06:46:52 26 4
gpt4 key购买 nike

我一直在尝试用比项目其他部分更高的编译器合规级别来编译项目的一个特定类,但我不知道如何做到这一点。

我正在使用 Java 6 编译该项目(出于兼容性原因),并且有一个类需要 Java 8,并且只有在其运行的 Java 版本 >= 时才会在代码中实例化(通过反射) 8.

问题是Java 8中的类显然不能在Java 6中编译,所以我想问,当项目导出到a时,Eclipse中是否有一种方法可以使用Java 8编译这个单个类可运行的 jar 。

总是可以选择在 Java 6 中编译项目(没有 java 8 类)、导出并使用 Java 8 手动编译该类,然后手动插入到 Jar 文件中,这工作正常,但不是很方便。

例如,假设该项目包含以下内容:

通用接口(interface):

public interface CommonInterface {

public void foo();

}

Java 8 类:

public class Java8Class implements CommonInterface {

@Override
public void foo() {
Arrays.asList("Some", "Java", "8", "code").forEach(System.out::println);
}

}

Java 6+ 类:

public class Java6PlusClass implements CommonInterface {

@Override
public void foo() {
List<String> list = Arrays.asList("Some", "Java", "6", "code");
for (String s : list) {
System.out.println(s);
}
}

}

以及主程序类:

public class Selector {

public static void main(String[] args) throws ReflectiveOperationException{
CommonInterface ci = getCorrectInstance();
ci.foo();
}

private static CommonInterface getCorrectInstance() throws ReflectiveOperationException {
String version = System.getProperty("java.version");
Matcher m = Pattern.compile("\\d\\.(\\d)\\..+").matcher(version);
String clazz = null;
if (m.find()) {
int jv = Integer.parseInt(m.group(1));
if (jv == 8)
clazz = "Java8Class";
else if (jv >= 6)
clazz = "Java6PlusClass";

}
if (clazz == null)
return null;
return (CommonInterface) Class.forName(clazz).newInstance();
}

}

在上面的示例中,是否可以配置 Eclipse,使得除“Java8Class”之外的所有类都按照 Java 6 合规性进行编译,而“Java8Class”则按照 Java 8 合规性进行编译?

谢谢。

最佳答案

您无法在 Eclipse 中执行此操作,而且我不认为您想要实现的目标是一个好主意。

您可以采取以下措施:

  1. 将此 Java 8 类的代码更改为 Java 6 中的等效代码(如果可能)。
  2. 使用该单个类创建一个新项目,并使用 Java 8 合规级别进行编译。启动应用程序时在命令行上指定这个新的 jar 文件,它应该可以解决问题。
  3. 您的应用程序有 2 个不同版本(一个兼容 Java 8,另一个兼容 Java 6),并根据系统上可用的 Java 版本启动正确的版本。

在使用 Java 6 JRE 执行程序的情况下,我不完全确定第二个选项是否只需将 jar 文件放入类路径中即可工作。如果无法启动,您可能必须执行一些类加载器技巧。

关于java - 使用与 Eclipse 中的其他版本不同的编译器合规性版本来编译类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43548915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com