我已经看到了下面的方法声明,但是我不知道如何<K, V>
和<T>
正在使用。
是什么public <K, V>
在这个方法呢?
public <K, V> void add(K k, V v)
是什么static <T>
在这个方法呢?
public static <T> int countGreaterThan(T[] anArray, T elem)
回想一下,在Java中,所有方法都必须在一个类中,因此该方法将在某种类中,比如说“ Clazz”。
public
表示绝对可以从类外部访问此方法。
static
表示当您调用此方法时,不需要从特定对象调用它,而是可以仅使用类名来调用它。因此,您可以通过键入Clazz.countGreaterThan
而不是使用作为对象实例创建的特定对象来调用countGreaterThenClazz
问题内容: 给定一些类,这两个方法声明是否等效? 和 问题答案: 对于呼叫者:是的,它们是等效的。 对于方法中的代码:否。 不同之处在于,在第一个示例的代码中,您可以使用类型T(例如,保存由创建的对象),而在第二个示例中,您不能使用类型T。
安吉丽卡·兰格(Angelica Langer)在关于仿制药的常见问题解答中说(参见Technicalities.FAQ822): 如果这些方法具有具有不同边界的类型参数,则它们不会重写,因为这些方法的签名不是重写等价的。请记住,类型参数边界是泛型方法签名的一部分。 示例(泛型子类型方法重载泛型超类型方法;不推荐): 我不明白为什么方法在类中重载。据我所知,这应该是一个编译时错误,因为在和中具有相
问题内容: 我是java泛型的新手,我的问题是: 在上面的语句中,当函数的返回类型为void时,为什么我们以前使用过?为什么此语法有效? 根据理论,方法本身可以是返回类型吗? 我的参考程序是 问题答案: 在这里没有什么做的返回类型; 这意味着这是一个通用函数,可以采用各种类型的数组。为了更容易理解,代码可能是这样的: 所以它告诉函数 “有一个通用类型,您接受的数组,因此,例如,如果我用您接受的通用
两次尝试在下面的MyTest类中传递我的泛型类。Strategy层次结构看起来不错,但是用泛型接口作为参数声明方法有问题。我该如何解决这个问题? Test1编译错误:类型策略中的方法setNode(capture#1-of?extends Node)不适用于参数(NodeImpl) 测试2编译错误:MyTest类型中的方法test2(策略)不适用于参数(MyStrategy) MyTest类是继承
问题内容: 如果在Java中创建泛型类(该类具有泛型类型参数),则可以使用泛型方法(该方法带有泛型类型参数)吗? 考虑以下示例: 正如您对通用方法所期望的那样,我可以使用任何对象调用的实例: 但是,如果我尝试使用 不 指定泛型类型的实例,则无论传入什么,我都会调用返回, 奇怪的是,如果返回类型是通用类,它将编译(例如(实际上,这可以解释-参见下面的答案)): 此外,如果输入通用类,即使仅使用通配符
如果在Java中创建泛型类(该类具有泛型类型参数),是否可以使用泛型方法(该方法采用泛型类型参数)? 考虑下面的例子: 正如您所期望的那样,对于任何对象,的实例,我都可以调用: 但是,如果我试图使用的实例而不指定泛型类型,那么调用将返回一个