2016-09-30 1 views
-3

그래서 나는 3 개 부분으로 구성되는 문자열이 있습니다자바 - 문자열 형태로 주어진 조건을 평가

fieldName: firstName 
operator: equals 
value: Nikola 

내가 원하는에 이러한 값을 fieldName, operator 및 매개 변수를 가정 value

이 그것을 평가할 수 있습니다, 자바 반사의 도움으로 조건으로 firstName equals Nikola. 이것이 가능한가? if(obj.getFirstName().equals(value))

편집 (Xenteros) :

문제 설명 :
코멘트에 대한 논의에 따르면, 나는 질문 자체에 있어야 MCVE로 질문에 설명을 추가하기로 결정 :
여러 필드가있는 클래스가 있으며, 모두 문자열을 포함합니다. 필드 이름으로 필드 값을 가져오고 다른 값인 String과 비교하는 솔루션에 대한 요청이 있습니다.
여러 연산자를 사용할 수 있습니다. 예를 들어 <, <=, >= 등이 있지만 equals도 있습니다. 이전에 예로 불행히도 추가되었습니다. 사용자가 "equals"을 메서드에 전달하면 equals을 호출해야합니다.

입력 예 :
User u,되도록 u.firstName.equals("John"))
"firstName", "John"
,
"<=".

예상 출력 :

true

+0

나는 이미 세 가지 매개 변수의 값을 얻었으므로 조건으로 구성해야합니다. – Kei

+0

시도한 파일을 게시하십시오. –

+0

이 도구를 사용하려는 목적은 무엇입니까? –

답변

1

당신은 반사에 대한 요구하는지 :

이의 당신이 OBJ라는 개체가 있다고 가정하자.

Field field = obj.getClass().getField(fieldName); 
Method method = field.getType().getMethod(operator, Object.class); //in case you mean method 

if (method.invoke(field.get(), value) {} 

하여 발생되는 예외의 많은 가능성이 있기 때문에 try-catch 그것을 둘러싸고해야합니다.

질문에 대한 당신의 갱신에 따라 나는 다음과 같은 제안 :

boolean check(Object obj, String fieldName, String operator, String value) throws IllegalArgumentException, someOtherExceptions { 
    Field field = obj.getClass().getField(fieldName); 
    if (operator.equals("equals") { 
     return field.get().equals(value); 
    } 
    if (operator.equals("<=")) { 
     return field.get().compareTo(value) <=0; 
    } 
    if (operator.equals("<")) { 
     return field.get().compareTo(value) < 0; 
    //other operators impl. 
    //at the end: 
    throw new IllegalArgumentException("Unknown operator"); 
} 

대신 Object obj 당신은 'fieldName에이'를 참조 할 수있는 모든 필드를 포함하는 클래스를 넣어해야합니다.

+0

나는 그것을해야 할 것 같아. 당신의 도움을 주셔서 감사합니다. – Kei

+0

그건 그렇고. upvote 및 해결책으로 표시로 자유롭게 느껴보십시오. 귀하의 질문을 편집하여 의견에서 설명한 내용을 추가 할 것입니다. – xenteros

+0

@Kei 질문을보고 편집 해 주시고 찾고 계신 것이 있는지 알려주십시오. – xenteros