instanceOf(클래스)와 같은 것이 있습니까?c) 자바어?
물체가 있는지 확인하고 싶다.o
클래스의 인스턴스입니다.C
또는 하위 클래스의C
.
예를 들어, 만약p
동급의Point
나는 되고 싶다.x.instanceOf(Point.class)
되려고true
그리고 또x.instanceOf(Object.class)
되려고true
.
박스형 프리미티브 타입에도 적용했으면 합니다.예를 들어, 만약x
는 입니다.Integer
그리고나서x.instanceOf(Integer.class)
그래야 한다true
.
그런 게 있나요?그렇지 않은 경우 어떻게 하면 이러한 방법을 구현할 수 있습니까?
Class.isInstance는 원하는 기능을 수행합니다.
if (Point.class.isInstance(someObj)){
...
}
물론 사용할 수 있다면 사용하지 않는 것이 좋습니다.instanceof
대신, 성찰 시나리오의 경우 유용한 경우가 많습니다.
오브젝트 o가 c클래스의 인스턴스인지 c클래스의 서브클래스의 인스턴스인지 확인하고 싶습니다.예를 들어 p가 클래스 Point의 경우 x.instanceOf(Point.class)를 원합니다.
음... 뭐?o, p, x가 뭐죠?
나는 그것이 원시적인 타입에서도 작동하기를 바란다.예를 들어 x가 정수일 경우 x.instanceOf(Integer.class)와 x.instanceOf(Object.class)도 true여야 합니다.
아니, 컴파일도 안 돼프리미티브는 객체가 아니므로 메서드를 호출할 수 없습니다.
어쨌든, 다음의 3가지가 있습니다.그 중 1개는, 확실히 고객이 원하는 것을 달성할 수 있습니다(어느쪽이 적용되는지에 따라 다릅니다).
- 그
instanceof
operator(컴파일 시 클래스를 알고 있는 경우)를 클릭합니다. - class.isInstance()는 컴파일 시 알 수 없는 클래스와 오브젝트의 클래스를 체크하는 경우에 사용합니다.
- Class.isAssignableFrom()은 지정된2개의 클래스 오브젝트에 대한 할당 가능성을 체크하는 경우에 사용합니다.
x instanceof Integer
x instanceof Object
올바른 구문을 사용하면 됩니다.
원초적인 타입은 완전히 다르게 해야 합니다.메서드를 생성할 수 없으므로 메서드를 유지하는 클래스가 필요합니다.x.instanceOf(Integer)가 아닌클래스), "MyClassComparer.instanceOf(x, Integer)"를 호출해야 합니다.'클래스'라든가 뭐 그런 거죠.이것은 오버로드 방식으로 쉽게 구현할 수 있지만, 그 기능이 전혀 필요한 경우는 보이지 않습니다.
실제로 Java에는 instance of라는 부울 연산자가 있습니다.이 연산자를 사용하여 객체가 클래스의 인스턴스인지 서브 클래스의 인스턴스인지, 특정 인터페이스를 구현하는 클래스의 인스턴스인지를 판단할 수 있습니다.
if(obj instanceof SomeClass) {
// Do something
}
Java 튜토리얼에는 이 연산자의 좋은 예가 있습니다.
★★★의 Class.isAssignableFrom()
입니다.
so so 。obj
슈퍼클래스 'Superclass'''Class<?> superCls
superCls.isAssignableFrom( obj.getClass() )
그리고.
obj instanceof superCls
동등합니다.
다음 작업을 수행할 수 있습니다.
if (foo instanceof classNameYouWantToCheck)
"원시적인 유형에도 적용했으면 합니다.예를 들어 x가 정수일 경우 x.instanceOf(Integer.class)와 x.instanceOf(Object.class)도 true여야 합니다.
왜일까요? 원시 유형과 참조 유형은 완전히 분리되어 있습니다.원시 int는 Integer나 Object의 하위 유형이 아닙니다.원시값의 유형은 컴파일 시 항상 정적으로 인식되기 때문에 그 유형을 테스트하는 것은 의미가 없습니다.물론 기본 값을 상자에 넣은 다음 유형을 테스트할 수 있습니다.
(Integer)5 instanceof Integer
하지만 그게 무슨 소용이야?
원시 객체와 일반 객체의 인스턴스(instance)를 혼동하신 것 같습니다.
obj instanceof Class
obj instanceof Class<?> // this is the one you want
언급URL : https://stackoverflow.com/questions/949352/is-there-something-like-instanceofclass-c-in-java
'programing' 카테고리의 다른 글
문자열 배열에 문자열 추가 (0) | 2022.09.27 |
---|---|
하위 배열 값을 사용하여 PHP 배열을 알파벳 순으로 정렬합니다. (0) | 2022.09.27 |
언제 NoSQL로 전환합니까? (0) | 2022.09.27 |
MySQL/MariaDB가 utf8mb4를 사용할 때 고유 키를 처리할 수 없음 (0) | 2022.09.27 |
존재하지 않는 코드 오류 - 마리아DB (0) | 2022.09.27 |