有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java方法的返回值能保证类型安全吗?

我以Spring的ResponseEntity为例,但我不确定为什么在方法签名中指定泛型的类型通常有效。如果我有一个返回ResponseEntity的控制器方法,那么当我在方法中创建ResponseEntity时,似乎不需要再次指定String

这相当于“ArrayList=new ArrayList<;>;()”还是我误解了

以下是Spring文档中的一个示例:

@RequestMapping("/handle")
public ResponseEntity<String> handle() {
   HttpHeaders responseHeaders = new HttpHeaders();
   responseHeaders.set("MyResponseHeader", "MyValue");
   return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
}

IntelliJ代码分析将指出,在返回中显式键入是多余的,因此我可以这样做:

return new ResponseEntity<>("Hello World", responseHeaders, HttpStatus.CREATED);

这是因为编译器检查了方法签名还是发生了不太明显的事情?如果我要更改代码:

return new ResponseEntity<>(123, responseHeaders, HttpStatus.CREATED);

然后我会(正确地)得到一个编译器警告


共 (1) 个答案

  1. # 1 楼答案

    正确,从Java 7开始,编译器可以推断类型,而无需显式定义。见:https://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html

    从Spring Java文档中可以看到ResponseEntity声明为public class ResponseEntity<T> extends HttpEntity<T>,因此当您指定ResponseEntity<String>作为返回类型时,Java编译器可以在返回语句return new ResponseEntity<>(...)中推断出这一点