在FindBugs源代码中,我找到了这个方法:
package edu.umd.cs.findbugs.ba;
....
public class ClassContext {
....
private <Analysis> Analysis getMethodAnalysisNoException(Class<Analysis> analysisClass, Method method) {
try {
return getMethodAnalysis(analysisClass, method);
} catch (CheckedAnalysisException e) {
IllegalStateException ise = new IllegalStateException("should not happen");
ise.initCause(e);
throw ise;
}
}
....
}
方法声明中第一个<Analysis>
的含义是什么?
答案 0 :(得分:0)
这是Generic类型。它们在Java 1.5中为introduced,允许您指定其他编译时间信息,以减少错误。当你谈到Java Generics时,重要的是要注意type erasure,因为它是一个编译时功能,它在运行时擦除,它是Object
(发生这种情况)属于Analysis
)类型。
答案 1 :(得分:0)
以下是我在这篇文章中撰写的关于泛型的一些信息:What does generic type mean?
在Java中,“泛型”是类型的参数。这可能听起来令人困惑,但这是一个简单的解释。如果你正在创建一个许多其他类将继承的类,你想要使它广泛而灵活。因此,您将使用“通用”类型来创建实例变量。
通用类型可以实现为:(注意菱形括号“&lt;&gt;”)
public class TestClass<T>
使用泛型创建实例这可能比您的问题更深入一些,但我想我会提到如何创建泛型类的实例。
请注意钻石大括号中的参数必须是一个对象。对于基本类型,您可以使用Int,Double,Float(使用大写首字母),Java将“自动将对象”自动“封装”为基本类型。
ClassName<String> obj = new ClassName<>();
答案 2 :(得分:0)
据我所知,它是Bytecode Analysis Framework
。绝对Analysis
是一个类。
您可以找到一些代码示例here。
What is the meaning of first <Analysis> in the method declaration?
此类型是方法声明的通用类型。
希望它会对你有所帮助。
答案 3 :(得分:0)
< Analysis >
是一个名字很差的类型变量。这意味着可以使用getMethodAnalysisNoException
参数为任何类型Class<T>
调用方法T
,并且如果未选中,则将返回类型T
的实例例外。通常我们不使用看起来像普通类名的类型变量名,因为它令人困惑,正如几个人在这里给出的错误答案所证明的那样。