Java方法声明使用<和>

时间:2014-03-17 03:52:38

标签: java

在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>的含义是什么?

4 个答案:

答案 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的实例例外。通常我们不使用看起来像普通类名的类型变量名,因为它令人困惑,正如几个人在这里给出的错误答案所证明的那样。