Java中的方法修饰符排序

时间:2013-06-11 02:26:15

标签: java methods syntax modifier

据我所知,这是一种典型方法的定义:

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

但是,如果您有多个修饰符,(例如publicstatic<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(); }
}

订购这些修饰符的正确或更传统的方法是什么?

3 个答案:

答案 0 :(得分:3)

这个website为您提供了修饰符排序的粗略指导。

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

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,private默认优先于泛型类型。

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

我不相信它在access关键字之前是合法的。换句话说,

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

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

public static void main(String[] args){

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