두 개의 Java 메소드가 다른 리턴 유형으로 동일한 이름을 가질 수 있습니까? [복제]
이 질문에 이미 답변이 있습니다.
두 개의 Java 메소드가 다른 리턴 유형으로 동일한 이름 을 가질 수 있습니까 ? 메서드의 반환 유형이 다르며 동일한 메서드 이름으로 선언됩니다.
허용됩니까?
두 메소드가 동일한 매개 변수 유형을 가지고 있지만 반환 유형이 불가능한 경우와 다를 경우. 에서 Java 언어 사양, 자바 SE 8 판, §8.4.2. 방법 서명 :
두 메서드 또는 생성자 M과 N은 동일한 이름, 동일한 형식 매개 변수 (있는 경우) (§8.4.4) 및 형식 매개 변수에 N의 형식 매개 변수 형식을 적용한 후 동일한 서명을 갖습니다. M의 동일한 형식 매개 변수 유형입니다.
두 방법 모두 매개 변수 유형이 다르면 (따라서 서로 다른 서명이 있음) 가능합니다. 이를 과부하라고합니다.
다른 매개 변수를 허용하는 경우에만 해당됩니다. 매개 변수가 없으면 다른 이름을 가져야합니다.
int doSomething(String s);
String doSomething(int); // this is fine
int doSomething(String s);
String doSomething(String s); // this is not
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");
}
}
인쇄물
here - Integer
here - Short
here - Byte
here - Void
자세한 내용은 여기에서 내 기사를 읽으십시오.
No. C++ and Java both disallow overloading on a functions's return type. The reason is that overloading on return-type can be confusing (it can be hard for developers to predict which overload will be called). In fact, there are those who argue that any overloading can be confusing in this respect and recommend against it, but even those who favor overloading seem to agree that this particular form is too confusing.
You can have two methods with the same arguments and different return types only if one of the methods is inherited and the return types are compatible.
For example:
public class A
{
Object foo() { return null; }
}
public class B
extends A
{
String foo() { return null; }
}
Only if their parameter declarations are different from memory.
The java documentation states:
The compiler does not consider return type when differentiating methods, so you cannot declare two methods with the same signature even if they have a different return type.
See: http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html
Even if it is an old thread, maybe some is interested.
If it is an option to you to use the same method inside the same class and archive different return types, use generics: Oracle Lesson Generics
Simple example for generic value holder class:
class GenericValue<T> {
private T myValue;
public GenericValue(T myValue) { this.myValue = myValue; }
public T getVal() { return myValue; }
}
And use it like this:
public class ExampleGenericValue {
public static void main(String[] args) {
GenericValue<Integer> intVal = new GenericValue<Integer>(10);
GenericValue<String> strVal = new GenericValue<String>("go on ...");
System.out.format("I: %d\nS: %s\n", intVal.getVal(), strVal.getVal());
}
}
... will result in the following output:
I: 10
S: go on ...
If it's in the same class with the equal number of parameters with the same types and order, then it is not possible for example:
int methoda(String a,int b) {
return b;
}
String methoda(String b,int c) {
return b;
}
if the number of parameters and their types is same but order is different then it is possible since it results in method overloading. It means if the method signature is same which includes method name with number of parameters and their types and the order they are defined.
'Programing' 카테고리의 다른 글
Keras 모델을 GPU에서 실행할 수 있습니까? (0) | 2020.09.21 |
---|---|
Rake의 네임 스페이스에 대한 기본 작업 (0) | 2020.09.21 |
Symfony2의 Twig 템플릿 엔진에 개체가 있는지 어떻게 확인합니까? (0) | 2020.09.21 |
경로 이름에 공백이있는 디렉토리로 cd 할 Bash 스크립트 (0) | 2020.09.21 |
명령에 git 기본 플래그 설정 (0) | 2020.09.21 |