2013-08-22 3 views

답변

4

이 아니 당신이 그렇게 할 수있는 방법 공개 무효 setBar()를 만드는

public class foo{ 
    private int bar; 
    public foo(){ 
    } 
} 

. Java는 연산자 오버로딩을 지원하지 않습니다. + 문자열 연결을 수행하기 위해 연산자에 과부하가 발생하지만 이는 유일한 예외입니다. = 연산자를 사용하는 또 다른 예제는 원하는 래퍼 클래스의 경우입니다. 래퍼 클래스의 경우 기본 유형 값을 해당 래퍼 유형에 직접 할당 할 수 있으므로 기본 값이 래퍼 유형에 자동 상자되도록합니다.

Integer val = 10; // 10 is auto-boxed to Integer reference 

그러나 그 목적으로 만 제한됩니다. 당신은 자신의 사용자 정의 유형에 대해 그렇게 할 수 없습니다.

방법 만들기가 유일한 옵션입니다.

5

당신이 의미하는 경우

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); 
+0

매트릭스로 작업하는 것이 좋을 것이라고 생각하지만,이 예제에서는 분명히 아닙니다. – sdasdadas

+0

bar의 액세스 수정자는 public이 아니므로 x.bar를 설정하려는 경우에도 변경해야합니다. –

+0

@ShivaKumar : 나는 그럴 것이라고 추정하고있었습니다. 동일한 클래스에서 코드를 호출 할 수 있지만 물론 :) –

0

아니, 캡슐화 논리에 반하는 및 Java 자체를. 여기

1

Foo myObject = new Foo();

myObject 레퍼런스를 보유하고있다. 객체 참조에 0과 같은 프리미티브 값을 할당 할 수 없습니다.

대신, 자바에서는 myObject.setBar(10);

0

을해야한다,이 협약은 객체의 내부 속성을 변경 세터와 게터를 제공하는 것입니다. 그러나,

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의 개념에서 파생됩니다.

+1

'foo.setBar (10)'또는'instance.setBar (10)'을 말하고 싶습니까? –

+0

@VikasV 잘 보였다. 고침, 고마워. – Gamb

+1

사이드 노트 : Java의 명명 규칙을 따르십시오. 수업은 대문자로 시작해야합니다. – Gamb

0

이 필드를 공개 할 수도 있습니다. 비즈니스 메서드에서 필요한 유효성 검사를 수행하면됩니다 (집합 중에 없음).

+0

이것은 내가 생각했던 것입니다. 그렇지만 제 질문은 생성자 내부에서 일종의 청취자를 public 필드에 넣을 수있어서 수동으로 일종의 호출을하지 않고도 일부 처리를 바로 할 수 있습니다. process() 메소드? – Xandor