내 변수가 int, array, double 등인지 어떻게 확인할 수 있습니까?
편집 : 예를 들어, 변수가 배열인지 어떻게 확인할 수 있습니까? 이를 수행하는 기능이 있습니까?
답변
Java는 정적으로 형식화 된 언어이므로 컴파일러가 대부분의 검사를 수행합니다. 변수를 특정 유형으로 선언하면 컴파일러는 해당 유형의 값 (또는 해당 유형의 하위 유형 인 값) 만 할당되도록합니다.
당신이 준 ( int
, array, double
) 예제 는 모두 원시적이며 하위 유형이 없습니다. 따라서 변수를 다음과 같이 선언하면 int
:
int x;
당신은 그것이 int
가치를 가질 것이라고 확신 할 수 있습니다 .
List
그러나 변수를로 선언 한 경우 변수가의 하위 유형을 보유 할 수 있습니다 List
. 이들의 예로는 ArrayList
, LinkedList
등
당신이있는 한 경우 List
변수를, 당신은 그것이이었다 알고하는 데 필요한 ArrayList
다음 작업을 수행 할 수 있습니다 :
List y;
...
if (y instanceof ArrayList) {
...its and ArrayList...
}
그러나 그렇게해야한다고 생각한다면 접근 방식을 재고 해 보는 것이 좋습니다. 대부분의 경우 객체 지향 원칙을 따르면이 작업을 수행 할 필요가 없습니다. 물론 모든 규칙에는 예외가 있습니다.
답변
Java의 메소드 과부하 기능을 남용하여 실제로 테스터를 롤링하기가 매우 쉽습니다. SDK에 공식적인 방법이 있는지 여전히 궁금합니다.
예:
class Typetester {
void printType(byte x) {
System.out.println(x + " is an byte");
}
void printType(int x) {
System.out.println(x + " is an int");
}
void printType(float x) {
System.out.println(x + " is an float");
}
void printType(double x) {
System.out.println(x + " is an double");
}
void printType(char x) {
System.out.println(x + " is an char");
}
}
그때:
Typetester t = new Typetester();
t.printType( yourVariable );
답변
a.getClass().getName()
-에서 참조하는 실제 객체의 데이터 유형을 제공 a
하지만 변수 a
가 원래 선언되었거나 이후에 캐스팅 된 데이터 유형은 제공하지 않습니다 .
boolean b = a instanceof String
-에서 참조하는 실제 객체 a
가 특정 클래스의 인스턴스 인지 여부를 알려줍니다 . 다시 말하지만, 변수 a
가 원래 선언되었거나 이후에 캐스팅 된 데이터 유형 은 instanceof 연산자의 결과와 관련이 없습니다.
이 정보는 다음에서 가져 왔습니다.
Java에서 변수 유형을 어떻게 알 수 있습니까?
이것은 일어날 수 있습니다. 나는 String
int로 구문 분석 Integer.parseInt(s.substring(a, b))
하려고하는데 그것을 요약하기 전에 int 또는 쓰레기를 쫓아 내는지 알고 싶습니다 .
그건 그렇고, 이것은 Reflection으로 알려져 있습니다. 주제에 대한 추가 정보는 다음과 같습니다. http://docs.oracle.com/javase/tutorial/reflect/
답변
int 대신 Integer, double 대신 Double 등으로 작업 할 수 있습니다 (이러한 클래스는 모든 기본 유형에 대해 존재합니다). 그런 다음 instanceof 연산자를 사용할 수 있습니다.if(var instanceof Integer){...}
답변
다음을 사용하십시오.
.getClass().getSimpleName();
예:
StringBuilder randSB = new StringBuilder("just a String");
System.out.println(randSB.getClass().getSimpleName());
산출:
StringBuilder
답변
글쎄, 변수의 유형을 확인하는 것은 이렇게 할 수 있다고 생각합니다.
public <T extends Object> void checkType(T object) {
if (object instanceof Integer)
System.out.println("Integer ");
else if(object instanceof Double)
System.out.println("Double ");
else if(object instanceof Float)
System.out.println("Float : ");
else if(object instanceof List)
System.out.println("List! ");
else if(object instanceof Set)
System.out.println("Set! ");
}
이렇게하면 오버로드 된 메서드가 여러 개 필요하지 않습니다. 추가 된 이점으로 인해 배열보다 컬렉션을 사용하는 것이 좋습니다. 그래도 배열 유형을 확인하는 방법을 모르겠습니다. 누군가가이 솔루션을 개선 할 수 있습니다. 도움이 되었기를 바랍니다!
추신 예, 이것이 기본 요소도 확인하지 않는다는 것을 알고 있습니다.
답변
질문의 첫 번째 부분은 의미가 없습니다. 컴파일 타임에 기본 변수의 유형을 모르는 상황은 없습니다.
두 번째 부분에서 변수가 배열인지 여부를 아직 알지 못하는 유일한 상황은 객체 인 경우입니다. 어떤 경우에 object.getClass().isArray()
알려줄 것입니다.
