我一直在試圖編譯我的項目與一個更高的編譯器合規性水平比項目的其餘部分一個特定的類,但我不知道如何做到這一點。編譯類與不同的編譯器兼容版本比其餘的在Eclipse中
我正在編譯Java 6中的項目(出於兼容性原因),並且存在一個需要Java 8的類,並且只會在代碼中實例化(使用反射),如果它運行的Java版本> = 8。
問題是,在Java 8中的類顯然不能在Java 6中編譯,所以我想問一下,如果Eclipse中有一種方法可以在將項目導出到Java 8時用Java 8編譯這個類一個可運行的罐子。
總是有選擇在Java 6中編譯項目(不包含java 8類),導出並手動編譯該類,然後用Java 8手動插入Jar文件,該工作正常但不是很好方便。
例如讓假設項目包括以下內容:
一個共同的接口:
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遵守編譯?
謝謝。
爲什麼不編譯8中的所有內容? – MGorgon
因爲有些計算機不能支持Java 8,所以他們超出了我的控制範圍,因此我無法在其上更新Java。 –
,不會工作@azurefrog,因爲java 8類使用java 8特定的代碼,不能被編譯爲java 6可能 – Imus