이 값을 설정된 범위로 유지하기 위해 처리하려는 int 유형의 단일 값을 가진 사용자 정의 객체가 있습니다. 내 질문은 다음과 같습니다 : 다음 클래스를 감안할 때, myObject = 0; 대신Java에서 '='연산자를 사용하여 사용자 정의 클래스 객체의 값을 설정하십시오.
답변
이 아니 당신이 그렇게 할 수있는 방법 공개 무효 setBar()를 만드는
public class foo{
private int bar;
public foo(){
}
}
. Java는 연산자 오버로딩을 지원하지 않습니다. +
문자열 연결을 수행하기 위해 연산자에 과부하가 발생하지만 이는 유일한 예외입니다. =
연산자를 사용하는 또 다른 예제는 원하는 래퍼 클래스의 경우입니다. 래퍼 클래스의 경우 기본 유형 값을 해당 래퍼 유형에 직접 할당 할 수 있으므로 기본 값이 래퍼 유형에 자동 상자되도록합니다.
Integer val = 10; // 10 is auto-boxed to Integer reference
그러나 그 목적으로 만 제한됩니다. 당신은 자신의 사용자 정의 유형에 대해 그렇게 할 수 없습니다.
방법 만들기가 유일한 옵션입니다.
당신이 의미하는 경우
foo x = new foo();
x = 10; // This is meant to set x.bar
는 아니, 당신은 자바에서 그렇게 할 수 없습니다. 좋은 점은 나에게 묻는다면 ... 가독성 측면에서 끔찍한 일이다.
당신 또한은 허용 변경할 수 없습니다 : 동등로
foo x = 10;
:
foo x = new foo();
x.bar = 10; // Or x.setBar(10);
매트릭스로 작업하는 것이 좋을 것이라고 생각하지만,이 예제에서는 분명히 아닙니다. – sdasdadas
bar의 액세스 수정자는 public이 아니므로 x.bar를 설정하려는 경우에도 변경해야합니다. –
@ShivaKumar : 나는 그럴 것이라고 추정하고있었습니다. 동일한 클래스에서 코드를 호출 할 수 있지만 물론 :) –
아니, 캡슐화 논리에 반하는 및 Java 자체를. 여기
Foo myObject = new Foo();
는 myObject
레퍼런스를 보유하고있다. 객체 참조에 0과 같은 프리미티브 값을 할당 할 수 없습니다.
대신, 자바에서는 myObject.setBar(10);
을해야한다,이 협약은 객체의 내부 속성을 변경 세터와 게터를 제공하는 것입니다. 그러나,
public int getBar() {
return bar;
}
당신은 할 수 없습니다 :
foo instance = new foo();
instance.setBar(10); //Sets bar to 10
instance.getBar(); //returns bar's current value (right now 10)
세터가 새 값을 수신하고 설정 :
public void setBar(int newBar) {
bar = newBar;
}
그리고 게터 필드의 현재 값에 액세스 할 수 있습니다 귀하의 경우에 적어도 과 같이 =
연산자를 오버로드해야합니다. 예를 들어 Integer
또는 Float
래퍼 클래스를 생각하는 경우 Java 구현 자체와 관련된 또 다른 무언가가 있으며 나중에 복싱 및 unboxing의 개념에서 파생됩니다.
이 필드를 공개 할 수도 있습니다. 비즈니스 메서드에서 필요한 유효성 검사를 수행하면됩니다 (집합 중에 없음).
이것은 내가 생각했던 것입니다. 그렇지만 제 질문은 생성자 내부에서 일종의 청취자를 public 필드에 넣을 수있어서 수동으로 일종의 호출을하지 않고도 일부 처리를 바로 할 수 있습니다. process() 메소드? – Xandor
아니요, 할 수 없습니다. –