0

据我了解,这是定义典型方法的方式:

modifier returnValueType methodName(list of parameters) {
    // Method body;
}

但是,如果您有多个修饰符(例如public, static, <GenericType>),它们应该有特定的顺序吗?

这是我过去考试问题之一的典型答案:

<S> public void emptyList(CyclicQueue<S> queue) {
    while(!queue.isEmpty()) { queue.pop(); }
}

如您所见,泛型修饰符<S>出现在之前,public但我在某些地方看到了这种情况:

public <S> void emptyList(CyclicQueue<S> queue) {
    while(!queue.isEmpty()) { queue.pop(); }
}

排序这些修饰符的正确或更传统的方式是什么?

4

3 回答 3

3

网站为您提供了修饰符排序的粗略指南。

泛型也应该在公共方法之后声明。

public <S> void emptyList(CyclicQueue<S> queue) {
   while(!queue.isEmpty()) { queue.pop(); }
}

不是

<S> public void emptyList(CyclicQueue<S> queue) {
    while(!queue.isEmpty()) { queue.pop(); }
}

模型答案将不起作用,因为您的修饰符 public、protected、default 的 private 优先于泛型类型。

于 2013-06-11T02:36:10.357 回答
2

泛型类型不是修饰符,在泛型方法中应该放在返回类型之前

public <S> void emptyList(CyclicQueue<S> queue) {
//         ^^^^ return type
    while(!queue.isEmpty()) { queue.pop(); }
}

您问题的模型答案将无法编译。

于 2013-06-11T02:33:13.247 回答
1

我不认为放在 access 关键字之前是合法的。换句话说,

public <S> void emptyList(CyclicQueue<S> queue) {
    while(!queue.isEmpty()) { queue.pop(); }
}

是正确的。Java 中的主要功能实际上回答了您的大部分问题 -

public static void main(String[] args){

在这里您可以看到正确的顺序:访问级别、静态、返回类型。添加泛型类型只是替换返回类型。

于 2013-06-11T02:30:09.390 回答