2016-11-06 2 views
0

모든 개체의 값이 비어 있는지 확인하는 메서드를 만들고 싶습니다. 입력 개체가 null이면 return true;입니다. 입력 형식이 배열 인 경우 길이를 확인하십시오. 다음은이 논리기본 빈 배열을 확인하는 방법

public static boolean isEmpty(Object input) { 
    if (input == null) { 
     return true; 
    } 
     if (input instanceof Collection) { 
     if (((Collection<?>) input).size() == 0) { 
      return true; 
     } 
    } 
    if (input instanceof String) { 
     if (((String) input).trim().length() == 0) { 
      return true; 
     } 
    } 
    if (input instanceof Object[]) { 
     if (((Object[]) input).length == 0) { 
      return true; 
     } 
    } 
    return false; 
} 

을 구현하는 나의 방법이다하지만 abfalse을 왜 내가 아무 생각이

int[] a = {}; 
float[] b = {}; 
Integer[] c = {}; 
Float[] d = {}; 
System.out.println(Validator.isEmpty(a)); 
System.out.println(Validator.isEmpty(b)); 
System.out.println(Validator.isEmpty(c)); 
System.out.println(Validator.isEmpty(d)); 

등 테스트하는 동안 문제이다. 누군가 나를 설명 할 수 있을까?

+2

을 * "A와 B는 거짓 왜 아무 생각이 없습니다."* 당신이 되세요 당신이'new float [0] instanceof Object []'를 할 때 당신이 얻는 것을 확인 했습니까? –

+1

이 방법에 대한 특별한 이유가 있습니까? 다른 타입 인자를 취하는 세가지 다른 isEmpty 메소드를 사용 해본 적이 있습니까? – pathfinderelite

+0

@ T.J.Crowder 죄송합니다! '호환되지 않는 조건부 피연산자 유형 float []과 Object []'이 있습니다 – Cataclysm

답변

5

float[]instanceof Object[]이 아닙니다. 모든 종류의 배열을 검사하려면 객체에서 클래스를 가져 와서 isArray 메서드를 확인해야합니다. 그런 다음합니다 (length 필드를 얻을 이후, 변태, 당신은 Class#getField을 사용할 수 없습니다) 길이를 얻을 수 Array.getLength를 사용할 수 있습니다

import java.lang.reflect.*; 

class Validator { 
    public static void main(String args[]) throws Exception { 
     int[] a = {}; 
     float[] b = {}; 
     Integer[] c = {}; 
     Float[] d = {}; 
     System.out.println(Validator.isEmpty(a));   // true 
     System.out.println(Validator.isEmpty(b));   // true 
     System.out.println(Validator.isEmpty(c));   // true 
     System.out.println(Validator.isEmpty(d));   // true 
     System.out.println(Validator.isEmpty(new float[3])); // false (just double-checking) 
    } 

    public static boolean isEmpty(Object input) { 
     if (input == null) { 
      return true; 
     } 
     if (input instanceof String) { 
      if (((String) input).trim().length() == 0) { 
       return true; 
      } 
     } 
     if (input.getClass().isArray()) { 
      return Array.getLength(input) == 0; 
     } 
     return false; 
    } 
} 
+0

코드 예를 들어 주셔서 감사합니다. 나는 아직도 내 방법을 바꾸는 방법에 대해 문제가 있니? 전에. – Cataclysm

+0

@Cataclysm : 예, 기대했던 것보다 더 고통 스러울 것 같아요. Class # getField'가 배열의'length' 필드를 제공하기를 거부하고 싶지 않았습니다. 문서화). –

관련 문제