假设我有一些方法接受List<?>
public void method(List<?> list) {
// some logic
}
Run Code Online (Sandbox Code Playgroud)
如何在运行时获取元素类型?是否可以?
我发现了这些建议(在这里):
((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0](不起作用,List是一个接口并且没有超类)// ChatGPT's work
public class App {
public static void main(String[] args) {
List<String> stringList = new ArrayList<>();
List<Integer> integerList = new ArrayList<>();
Type stringType = getListElementType(stringList);
Type integerType = getListElementType(integerList);
System.out.println("String List Element Type: " + stringType.getTypeName());
System.out.println("Integer List Element Type: " + integerType.getTypeName());
}
private static Type getListElementType(List<?> list) {
Type genericType = list.getClass().getGenericSuperclass();
if (genericType instanceof ParameterizedType) {
ParameterizedType …Run Code Online (Sandbox Code Playgroud) 真的有必要lock.unlock()在一个finally街区吗?下面是一个常见的习语
try {
lock.lock();
// some code
} catch (Exception e) {
// exception handling
} finally {
lock.unlock();
}
Run Code Online (Sandbox Code Playgroud)
然而,Java 语言规范是这样说的:
如果主体的执行曾经完成,无论是正常还是突然 [大概,例如由于异常],都会在同一监视器上自动执行解锁操作。
那么真的有必要加lock.unlock()块吗?finally或者我误解了规范?