2010-12-12 2 views
10

매개 변수를 메서드에 전달할 때 두 언어 모두 값별로 전달된다는 것을 알고 있습니다. 그러나 C#은 기본 유형의 참조로 전달할 refout 키워드를 지원합니다. 자바에서 동일한 키워드와 기술을 찾고 있습니까?Java에서 C#의 참조 및 출력

내 생각을 전달하기 위해 자바 Integer 래퍼 클래스 대신 int을 사용하고 있습니다.

어떤 제안 및 예제를?

답변

12

당신의 추측이 정확 변경된 모든 값을 반환하는 것입니다. 래퍼가 필요합니다 (Integer는 불변이므로).

어떤 사람들은이 목적을 위해 단일 요소 배열을 사용

int[] x = { 0 }; 
int[] y = { 0 }; 
someMethod(x, y); 
return x[0] + y[0]; 

많은 GOTO로 바로가 그 기술을 평가합니다.

SomeMethodResult result = someMethod(x, y); 
return result.getX() + result.getY(); 

일부는 작업을 준비 할이 필요성을 피하는 방법 내부에서 수행되는 :

public class Holder<T> { 
    private T _value; 
    private Holder(T value) { _value = value; } 
    public static of(T value) { return new Holder<T>(value); } 
    public T getValue() { return _value; } 
    public void setValue(T value) { _value = value; } 
} 

... 

Holder<String> x = Holder.of("123"); 
Holder<String> y = Holder.of("456"); 
someMethod(x, y); 
return x.getValue() + y.getValue(); 

일부는 특수 제작 유형을 정의 :

어떤 사람들은 일반적인 홀더 클래스를 정의 by-reference argument for first place :

return someMethod(x, y); 

이러한 각각의 기술 s에는 장단점이 있습니다.

  • 배열 : 단순 대못생긴, 배열이 정확히 하나 개의 요소를
  • 홀더 필요에 의존 : 자세한 대 안전, 권투를
  • 특수 제작 유형 : 자세한 대 안전 가능한 과잉
  • 변경 방법 : 안전,
  • 항상 가능한 것은 아니다 청결 대

개인적으로 나는 자바가 엉망이라고 생각합니다. 차라리 by-reference 인수를 피할 것이지만 Java에서 메소드의 여러 반환 값을 허용하기를 바랍니다. 하지만, 사실, 나는이 여행을 매우 자주하지 않습니다. 나는이 특징을 위해 신장을주지 않을 것이다. :)

+0

나는'int []'기법을 좋아한다. 나는 그것을 시도하고 멋지게 일했습니다. 감사. – Tarik

+0

+1 포괄적 인 대답과 나는 거의 마지막 단락에 동의한다. – BoltClock

+0

IMO'int []'는 못 생겼지 만''goto' -level ''근처에 없다. 그것은 언어 기능 (실제 패스 - 바이 - 레퍼런스)의 부족을 가장 간단한 방식으로 해킹하고 있습니다. 이것은 C에서 "포인터를 지나쳐서"와 거의 똑같이 만듭니다. 우리는 자바에서 자주 이것을 필요로하지 않습니다. C에서와 마찬가지지만, 기본적으로 두 언어가 메모리 관리를 다루는 방식과보다 개념적인 수준에서 "객체 관리"를 다루는 방식 때문입니다. –

5

Java는이 기능을 지원하지 않습니다.

+0

+1. 짧고 요점 :-) – Joey

1

Java는 참조로 원시 유형을 전달하는 것을 지원하지 않습니다.

Integer으로 감싸는 것은 변경 불가능한 유형이므로 (즉, 한 번만 변경할 수 있음) 도움이되지 않습니다.

1

Java에는이 기본 제공이 없습니다. Integer은 변경할 수 없으므로 수행하지 않습니다. 상태를 변경할 수 없습니다.

직접 변경할 수있는 래퍼 클래스를 만들어야합니다. 그러나 이것은 매우 위험하며 예기치 않은 결과를 초래할 수 있으므로 피해야합니다.

0

자바는이 기능 여기

이 그나마 그들이

1

수있는 유일한 방법이 아닌 순수한 OOP 언어 자바를 부르는 이유

http://www.harding.edu/fmccown/java_csharp_comparison.html

그게 전부가 통과하는 C#을 비교 대 자바에 대한 링크입니다 값은 다시 변경 가능 값에 대한 참조를 전달하는 것입니다.

public void calc(int[] value) { value[0] = 1; } 
public void calc(AtomicInteger value) { value.set(1); } 

그러나 할 수있는 간단한 일이

public int calc() { return 1; }