Java에서 연산자 오버로드
Java로 연산자를 오버로드 할 수 있는지 알려주세요. Java의 어느 곳에서나 사용되는 경우 알려주십시오.
아니요, Java는 사용자 정의 연산자 오버로드를 지원하지 않습니다. "custom"연산자 오버로딩에 근접한 Java의 유일한 측면은 문자열에 대한 + 처리입니다. 이는 상수의 컴파일 타임 연결 또는 StringBuilder / StringBuffer를 사용한 실행 시간 연결을 초래합니다. 같은 방식으로 작동하는 자체 연산자를 정의 할 수 없습니다.
자바처럼 (및 JVM 기반) 언어에 대해 수행 지원 연산자 오버로딩을, 당신은 볼 수 있었다 멋져요 . 또는 Java 컴파일러 플러그인 솔루션으로 운이 좋을 수도 있습니다 .
Java에서 연산자 오버로딩은 문자열 유형의 연결에 사용됩니다.
String concat = "one" + "two";
그러나 고유 한 연산자 오버로드를 정의 할 수 없습니다 .
지적 모든 사람들뿐만 아니라 +
문자열에 대한 과부하, -
또한 모두 부동 소수점 및 정수 작업에 과부하 등이다 *
하고 /
.
[edit] %
또한 부동 소수점에 과부하가 걸리므로 C 또는 C ++ 배경을 가진 사람들에게는 약간 놀라운 일이 될 수 있습니다.
Java는 연산자 오버로드를 허용하지 않습니다. 선호되는 접근 방식은 a.add(b)
대신 클래스에서 메소드를 정의하여 조치를 수행하는 것입니다 a + b
. Java와 같이 C에서 제외 된 다른 비트에 대한 요약은 다음과 같습니다 .C 및 C ++에서 제거 된 기능
Java는 연산자 오버로드를 허용하지 않으므로 직접 수행 할 수 없습니다.
그러나 한 가지 예외가 있습니다. + 및 + = 는 String 객체에 대해 오버로드됩니다.
Java Operator Overloading을 시도 할 수 있습니다 . 자체 제한이 있지만 연산자 오버로드를 실제로 사용하려는 경우 시도해 볼 가치가 있습니다.
다른 많은 사람들이 대답했듯이 Java는 사용자 정의 연산자 오버로드를 지원하지 않습니다.
어쩌면 이것은 주제가 아닌 것일 수도 있지만 일부 답변에서 읽은 내용에 대해 언급하고 싶습니다.
가독성에 관하여.
비교:
- c = a + b
- c = a.add (b)
다시 봐!
어느 것이 더 읽기 쉬운가?
사용자 정의 유형을 작성할 수있는 프로그래밍 언어는 내장 유형 (또는 기본 유형)과 동일한 방식으로 작동 할 수 있어야합니다.
따라서 Java는 일반 프로그래밍의 기본 원칙을 위반합니다.
내장 유형의 객체를 사용자 정의 유형의 객체와 상호 교환 할 수 있어야합니다.
( '그가'내장 객체 '라고 말했습니까?'라고 궁금해 할 수도 있습니다. 예, 여기를 참조하십시오 .)
문자열 연결 정보 :
수학자들은 세트에 대한 정류 연산을 위해 symnol +를 사용합니다.
따라서 a + b = b + a임을 확신 할 수 있습니다.
문자열 연결 (대부분의 프로그래밍 언어에서)은이 일반적인 수학 표기법을 존중하지 않습니다.
a := "hello"; b := "world"; c := (a + b = b + a);
또는 Java로 :
String a = "hello"; String b = "world"; boolean c = (a + b).equals(b + a);
추가 :
Java 평등과 정체성이 어떻게 혼동되는지 주목하십시오. == (같음) 기호는 다음을 의미
합니다. 기본 유형에 대한 평등
b. 따라서 사용자 정의 형식에 대한 신원 확인을 위해 equals () 함수를 동등 하게 사용해야합니다 .
하지만 ... 연산자 오버로딩과 어떤 관련이 있습니까?
언어가 연산자 오버로드를 허용하는 경우 사용자는 동등 연산자에 올바른 의미를 줄 수 있습니다.
Java 코드와 함께 Xtend를 사용하십시오. 연산자 오버로드를 지원합니다.
package com.example;
@SuppressWarnings("all")
public class Test {
protected int wrapped;
public Test(final int value) {
this.wrapped = value;
}
public int operator_plus(final Test e2) {
return (this.wrapped + e2.wrapped);
}
}
package com.example
class Test2 {
new() {
val t1 = new Test(3)
val t2 = new Test(5)
val t3 = t1 + t2
}
}
공식 웹 사이트에는 각 운영자를 위해 구현할 메소드 목록이 있습니다!
또는 Java Groovy를 만들고 이러한 기능을 오버로드하여 원하는 것을 얻을 수 있습니다.
//plus() => for the + operator
//multiply() => for the * operator
//leftShift() = for the << operator
// ... and so on ...
class Fish {
def leftShift(Fish fish) {
print "You just << (left shifted) some fish "
}
}
def fish = new Fish()
def fish2 = new Fish()
fish << fish2
누가 그루비가되고 싶지 않습니까? :디
아니요 Java에서 컴파일 된 groovy JAR을 동일한 방식으로 사용할 수 없습니다. 여전히 Java의 컴파일러 오류입니다.
C ++와 달리 Java는 사용자 정의 연산자 오버로드를 지원하지 않습니다. 오버로드는 java 내부에서 수행되며 ex의 경우 + (plus)를 사용할 수 있습니다. int a = 2 + 4; , string = "hello"+ "world"; 여기에 2 개의 정수를 더하고 2 개의 문자열을 연결합니다. 따라서 Java는 내부 연산자 오버로드를 지원하지만 사용자 정의는 지원하지 않는다고 말할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/1686699/operator-overloading-in-java
'IT story' 카테고리의 다른 글
X 서버를 실행하지 않고 matplotlib 그래프 생성 (0) | 2020.05.26 |
---|---|
새 폴더를 만드는 방법? (0) | 2020.05.26 |
Matplotlib에서 하위 플롯에 제목을 추가하는 방법은 무엇입니까? (0) | 2020.05.26 |
Windows 서비스가 실행 중인지 확인하는 방법 (0) | 2020.05.26 |
MySQL LEFT JOIN으로 행 삭제 (0) | 2020.05.26 |