Ant 1.10.2与Java 10兼容吗?ant文档不是很清楚:它只是说它与最低版本的Java 1.5兼容.我怎么能确定它与java 10兼容?谢谢!
我正在尝试将我的应用程序升级到 Java 10,因此,我安装了 JDK 并设置了 JAVA_HOME:
C:\Users\pupeno\app>echo %JAVA_HOME%
"c:\Program Files\Java\jdk-10"
C:\Users\pupeno\app>%JAVA_HOME%\bin\javac.exe --version
javac 10
Run Code Online (Sandbox Code Playgroud)
但无论我尝试用 Maven 做什么,我都会得到同样的错误:
C:\Users\pupeno\app>mvn package
Files\Java\jdk-10""=="" was unexpected at this time.
C:\Users\pupeno\app>mvn --help
Files\Java\jdk-10""=="" was unexpected at this time.
C:\Users\pupeno\app>cd ..
C:\Users\pupeno>mvn --help
Files\Java\jdk-10""=="" was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)
这个错误是什么意思?这是怎么回事?我如何解决它?
在Java 10中,这给了我一个警告 -
ArrayList a = new ArrayList<>();
a.add(23);
a.add("str");
Run Code Online (Sandbox Code Playgroud)
"ArrayList是一个原始类型.应该参数化对泛型类型ArrayList的引用"
原因是Generic背后,但对于这个代码
var b = new ArrayList<>();//Object type
b.add(3);
b.add("string");
Run Code Online (Sandbox Code Playgroud)
为什么编译器没有给出任何警告?
注意: - 我知道var
仅限于方法范围.只是想知道切换到var的泛型的设计概念
编辑1: - 不要像我想知道的内部设计那样重复标记,以及为什么java没有为var添加泛型内容?
它正在使用 java 8,但我更改为 java 10(我关注了这篇文章:无法使用 Maven 编译简单的 Java 10 项目)
我收到此错误:
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:47 min
[INFO] Finished at: 2018-09-26T20:15:28Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project importparcoursup: Fatal error compiling: invalid flag: --release -> [Help 1]
[ERROR]
Run Code Online (Sandbox Code Playgroud)
gitlab-ci.yml
image: maven:latest
stages:
- build
build:
stage: build
script:
- mvn install:install-file -Dfile=lib/ojdbc8.jar -DgroupId=com.oracle -DartifactId=ojdbc8 -Dversion=12.2.0.1 -Dpackaging=jar compile
Run Code Online (Sandbox Code Playgroud)
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>nc.unc</groupId>
<artifactId>importparcoursup</artifactId> …
Run Code Online (Sandbox Code Playgroud) 我有一个dto类,它存储了一些特定主题的学生和标记.基本上是这样的.
List<StudentInfoDTO> studentInfoDTO = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
其中StudentInfoDTO如下所示
public class StudentInfoDTO {
Long studentId;
Short marks;
}
Run Code Online (Sandbox Code Playgroud)
现在我想要有最小分数的学生ID.
我在下面试过但没有给出预期的结果.
int smallest = 0;
for(int i = 0; i < studentInfoDTO.size(); i++) {
smallest = studentInfoDTO.get(i).getMarks();
int x = studentInfoDTO.get(i).getMarks();
if (x < smallest) {
smallest = x;
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个数组,我想转换为Map,这样数组中的第一个元素是键,第二个元素是值,依此类推.
我正在尝试以下内容:
Arrays.asList("Tamilnadu", "chennai", "Karnataka", "Bengluru")
.stream()
.collect(HashMap::new,
(a, b) -> a.put(b, ""),//value should be next element in array
(a, b) -> a.putAll(b)
);
Run Code Online (Sandbox Code Playgroud)
我的困惑是如何在同一个迭代中获取下一个元素,以便我可以做到a.put(b,nextElementToB)
.
有人可以通过使用流来帮助解决这个问题,因为我想尝试使用函数式编程吗?迭代将成为这样做的唯一方法吗?
我认为Java编译器(Java 11)本身可以推断出实际的泛型类型,如果我给它足够的提示,例如当泛型类型是方法参数并且我作为参数提供实际类型的实例时.
例如,我有以下类:
public class Var<T>
{
public T value;
public Var(T value)
{
this.value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我尝试以下3次尝试,我希望所有人都能编译:
//(1) Compilation error!
Var v = new Var(0);
++v.value;
//(2) Compilation error!
Var v = new Var<Integer>(0);
++v.value;
//(3) Compiles!
Var<Integer> v = new Var(0);
++v.value;
Run Code Online (Sandbox Code Playgroud)
1)我希望(1)编译,因为通过使用Integer
(或int
)参数,编译器知道实际类型可能就足够了.所以++v.value;
我希望编译器知道变量是一个Integer
,但事实并非如此.它仍然认为它是一个Object
.
2)添加一些显式信息.但编译器仍然无法理解.
3)按预期编译.
然后,我尝试使用var
关键字进行类型推断:
//(4) Compilation error!
var v = new Var(0);
++v.value;
//(5) Compiles!
var v = new Var<Integer>(0);
++v.value;
Run Code Online (Sandbox Code Playgroud)
4)同样,我希望(4)编译,因为类型可以从参数中推断出来. …
我得到了以下部分 Java 代码:
public static void main(String[] args) {
var main = new Main();
main.start();
}
Run Code Online (Sandbox Code Playgroud)
我不明白第 2 行 (Main()) 中的初始化。
另外,Main() 的数据类型是什么?假设,我不想使用 'var' 关键字,那么我应该使用什么?
如果有任何替代代码,请告诉我。
请参考以下示例.
====之前====
---- A.java ---
var userAccounts = userService.getUserAccounts();
Run Code Online (Sandbox Code Playgroud)
--- B.java
class UserService {
public OldUserAccounts getUserAccounts();
}
Run Code Online (Sandbox Code Playgroud)
==== ====之后
---- A.java ---
var userAccounts = userService.getUserAccounts();
Run Code Online (Sandbox Code Playgroud)
--- B.java
class UserService {
public NewUserAccounts getUserAccounts();
}
Run Code Online (Sandbox Code Playgroud)
尽管A.java发生了变化,但B.java源文件没有变化.B.class文件的信息有'userAccounts'变量类型是'OldUserAccounts'不是吗?如果我将修改后的源文件应用于真实服务器.'var'会产生一个bug吗?
注意: 我知道这是一个不好的做法,即使没有var更改也可能是字节码不兼容的.在我的案例中,重建整个项目的想法并不好.成本太高了
任何想法或解决方法??