2010-05-17 6 views
0

일부 코드를 C#에서 Java로 변환하는 중입니다. 나는 전에 C#을 사용 해본 적이 없지만, 지금까지는 꽤 쉬웠다.C# 대리인 Java 변환

내가 가지고있는 C#을 파일에 다음과 같습니다 라인 :

coverage.createMethod = delegate (Gridpoint gp){ 
//Some method stuff in here, with a return objecct 
} 

정확히 이것이 어떻게하려고? 그것은 인라인 클래스처럼 조금 보이지만 나는 자바에

편집 htis를 변환하는 방법에 대한 이동하는 방법을 잘 모르겠습니다 : 내가

다음 한 STKDriver.java라는 파일에서 특정 문제

에 더

public DClass(Class class1, String string, Class<CoverageGridPoint> class2{} 
. 
. 
. 
public IServiceProvider invoke(CoverageGridPoint gridPoint){ 
    return something; //of the classtype Platform 
} 

이 올바르게 수행됩니다 나는 다음과 같은 한 CreateCoverageGridPointForAccess를 확장 채우기 DClass.java에서는

CoverageDefinitionOnCentralBody coverage = new CoverageDefinitionOnCentralBody(...); 
. 
. 
. 
DClass value = new DClass(STKDriver.class, "invoke", CoverageGrid.class); 
coverage.setGridPointCreationMethod(value); 
? 클래스 CreateCoverageGridPointForAccess 추상적 인

http://www.agi.com/resources/help/online/AGIComponentsJava/index.html?page=source%2FWhatsNewJava.html

공지 있고 Delegate 클래스 것으로 확장 : 클래스 정의는 여기에 연결되어 있습니다.

내가 만든이 구현이 올바른 모양입니까? 필요한 경우 더 많은 코드를 쓸 수 있습니다.

답변

3

이것은 C#의 익명 메소드입니다. 다음과 같이 기술적으로 똑같습니다.

coverage.createMethod = new Func<Gridpoint, object>(SampleMethod); 

public object SampleMethod(Gridpoint gp) 
{ 
    return thingy; // Pseudo for return value 
} 

코드를 단축하는 데 사용할 수있는 바로 가기입니다.

+1

메서드가 개체를 반환하기 때문에 형식을 캐스팅해야합니까? coverage.createMethod는 델리게이트입니다. – Derek

+1

'coverage'객체는 나중에 그 델리게이트를 실행할 것입니다. 그래서 우리는 객체를 createMethod에 할당하지 않고 나중에 실행할 메소드를 지정합니다. – Tejs

+0

나는이 자료를 보면서 많은 사람들이 추천 해 줄 것을 권하고 싶다 : http://onjava.com/pub/a/onjava/2003/05/21/delegates.html – Tejs

0

coverage.createMethod은 대표입니다.

다음 코드는 익명 메소드를 생성하고 위임에 할당 : 누군가가 coverage.createMethod를 호출 할 때

coverage.createMethod = delegate (Gridpoint gb) { 
} 

, 익명 메서드가 실행됩니다 그래서.

3

답변은 정확합니다. 그러나 익명 함수는 익명의 위임자로부터 외부 함수에 선언 된 기존 로컬 변수를 사용하는 클로저를 사용할 수 있으므로주의해야합니다. 나는 Java 프로그래머가 아니기 때문에 Java가 이것을 지원하는지 모르겠습니다.

+1

아니요, Java 7에서 적용됩니다. –

+0

좋은 지적입니다. 자바는 내가 아는 한 익명의 클래스에서 임의의 변수를 캡쳐하는 것을 지원하지 않으므로주의해야합니다. – JulianR

+0

자바는 '최종'변수 또는 매개 변수 캡처를 지원합니다. –