2012-04-13 3 views
1

java에서 나는 아래와 같이 속기 변수 할당을 사용하려고합니다. 현재 owner은 다른 줄에 지정되어 있지만 아래 줄과 같은 줄에 넣고 싶습니다. 이것은 작동하지 않습니다 - 불가능하거나 다른 경로가 있습니까?속기 변수 지정

if ((User owner = search.getOwner()) instanceof User && owner.getId() != null) { 
     searchQuery.append("owner_id = :ownerId AND "); 
     queryMap.put("ownerId", owner.getId()); 
    } 

감사

+0

'User' 유형의 변수에 저장된 객체가'instanceof User'인지 확인하는 것이 약간 이상합니다. 변수에 null이 포함되어 있지 않으면 Java는이 테스트가 true 인 객체 만 허용하므로'instanceof User' 테스트는'! = null'으로 더 간단하게 표현할 수 있습니다. –

답변

2

인 코드 소유자는 if 조건의 범위에서 로컬로 선언됩니다. 이 코드 수정을 시도하십시오.

User owner = null; 
if ((owner = (User)search.getOwner()) instanceof User && owner.getId() != null) { 
     searchQuery.append("owner_id = :ownerId AND "); 
     queryMap.put("ownerId", owner.getId()); 
    } 
+0

그게 도움이 되긴하지만, 완벽하게 코드를 작성하십시오 – Webnet

+0

아마도 OP에서 발생하는 문제 (실제로는 언급되지는 않았지만)는 코드가 컴파일되지 않을 것이라는 것이 었습니다. 소유자 선언은 별도의 줄에 필요합니다. –

+1

@Webnet : 그렇습니다. 구문에서 허용하지 않습니다. –

2

아니, 없다. 내가 아는 한 적어도.

값 할당 부분 (owner = search.getOwner())을 if 부분에 넣을 수 있지만 User owner 선언은 고유해야합니다.

1

보기에 더 읽기 좋은 코드는 무엇입니까?

cat에 대해 getOwner가 사용자를 반환하고 거기 instanceof 테스트가 필요하지 않다고, 또는 어떤 경우에 당신이 쓸 수하지 않는 하나의 주석에 언급 한 바와 같이
User owner = search.getOwner(); 
if (owner instanceof User && owner.getId() != null) { 
    searchQuery.append("owner_id = :ownerId AND "); 
    queryMap.put("ownerId", owner.getId()); 
} 

: 자바

Object owner = search.getOwner(); 
if (owner instanceof User && (User) owner.getId() != null) { 
    searchQuery.append("owner_id = :ownerId AND "); 
    queryMap.put("ownerId", (User) owner.getId()); 
} 
+0

search.getOwner()는 Object를 반환합니다. 그래서 (사용자) search.getOwner()에 의해 반환 된 형식을 암시 적으로 가리켜 야합니다. 그렇지 않으면 instanceOf owner를 확인하는 것이 무엇입니까? – ITCuties

+0

@ITCuties True, 복사하여 붙여 넣기 오류 ;-) – assylias

1

Asssignment을 ExpressionStatement이고 if 조건은 만 허용합니다. 신뢰할만한 출처는 Java Language Specification을 참조하십시오.