jen*_*fer 83 java methods return-type
两个Java方法可以使用不同的返回类型具有相同的名称吗?方法的返回类型不同,它们使用相同的方法名称声明.
这是允许的吗?
uth*_*ark 80
如果两个方法都具有相同的参数类型,但返回类型不同,则不可能.来自Java语言规范,Java SE 8 Edition,§8.4.2.方法签名:
两个方法或构造函数M和N具有相同的签名,如果它们具有相同的名称,相同的类型参数(如果有的话)(第8.4.4节),并且在将形式参数类型N调整为类型参数之后M,相同的形式参数类型.
如果两种方法都有不同的参数类型(因此,它们具有不同的签名),那么它是可能的.它被称为重载.
Kai*_*aja 32
只有,如果他们接受不同的参数.如果没有参数,则必须具有不同的名称.
int doSomething(String s);
String doSomething(int); // this is fine
int doSomething(String s);
String doSomething(String s); // this is not
Run Code Online (Sandbox Code Playgroud)
Pet*_*rey 19
根据JLS,您不能由于Java 6/7编译器(Oracle的JDK,OpenJDK,IBM的JDK)中的功能/错误,如果您使用泛型,则可以为相同的方法签名使用不同的返回类型.
public class Main {
public static void main(String... args) {
Main.<Integer>print();
Main.<Short>print();
Main.<Byte>print();
Main.<Void>print();
}
public static <T extends Integer> int print() {
System.out.println("here - Integer");
return 0;
}
public static <T extends Short> short print() {
System.out.println("here - Short");
return 0;
}
public static <T extends Byte> byte print() {
System.out.println("here - Byte");
return 0;
}
public static <T extends Void> void print() {
System.out.println("here - Void");
}
}
Run Code Online (Sandbox Code Playgroud)
打印
here - Integer
here - Short
here - Byte
here - Void
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请阅读此处的文章
不,C++和Java都禁止在函数的返回类型上进行重载.原因是返回类型的重载可能会令人困惑(开发人员很难预测将调用哪个重载).事实上,有些人认为任何超载都可能在这方面令人困惑,并建议反对它,但即使是那些支持超载的人也似乎同意这种特殊形式太混乱了.
只有当其中一个方法被继承并且返回类型兼容时,您才能拥有两个具有相同参数和不同返回类型的方法。
例如:
public class A
{
Object foo() { return null; }
}
public class B
extends A
{
String foo() { return null; }
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
120124 次 |
最近记录: |