Java Generics - 如何使用类型参数编写静态方法?

时间:2016-03-27 03:59:14

标签: java generics

来自C ++背景,我希望编写一些可以在我的应用程序中使用的util静态方法,而不必通过对象创建。我希望在Java Generics中使用函数模板的等价。在这一点上,我想澄清我正在学习Java泛型。

但是在尝试时,我可以看到编译器不允许我这样做。我可以看到一些very good discussion as well here。但后来我用一些警告信息来编写一个类似触摸的内部静态类,并根据我的直觉在那里工作。很明显,访问内部类是笨拙的,我在下面介绍过。我想知道为什么这个在Java中以这种方式设计,并且这个内部类将为外部类提供泛型。

public class ReflectionBasics<X, Y> {

    public static void findMax (X xData, Y yData ){
       // compiler error - cannot reference static type to non-static type X 
    }

    public void findMin(X xData, Y yData){
        // this is fine
    }

    static final class InnerClass<E> {
        public void findMin(E data){
            // this will work
        }
    }
}

笨拙的访问者:

class AccessorClass{
    AccessorClass(){
        ReflectionBasics.InnerClass<Integer> myData = new ReflectionBasics.InnerClass<Integer>();
        myData.findMin(400);

    }
}

1 个答案:

答案 0 :(得分:1)

如果要在方法上放置类型参数,只需将它们粘贴在返回类型之前(您可能不希望它为void):

public static <T extends Comparable<T>> T findMax(T a, T b) {
    ...
}

在大多数情况下,您可以跳过呼叫站点的类型参数,并为您推断:

Integer max = WhateverClass.findMax(integerA, integerB);