来自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);
}
}
答案 0 :(得分:1)
如果要在方法上放置类型参数,只需将它们粘贴在返回类型之前(您可能不希望它为void
):
public static <T extends Comparable<T>> T findMax(T a, T b) {
...
}
在大多数情况下,您可以跳过呼叫站点的类型参数,并为您推断:
Integer max = WhateverClass.findMax(integerA, integerB);