View

Type class

jaeeH 2022. 3. 3. 11:17

 

 

 

Type Class

: Apex class에 해당하는 Apex type을 가져오고 새 type을 인스턴스화하는 메소드를 포함한다

 

 

Namespace

System

 

사용법

forName 메소드를 사용하여 기본 제공 클래스 또는 사용자 정의 클래스일 수 있는 Apex 클래스의 type을 검색.

위의 메소드를 사용하여 public&global class를 검색 O, context 사용자에게 액세스 권한이 있더라도 private class는 X

 

newInstance 메소드를 사용하여 인터페이스를 구현하는 Type을 인스턴스화 하고, package subscriber와 같은 다른 사용자가 메소드의 구현을 제공하도록 허용하려면서 해당 메소드를 호출 O

 

 

예시 : Name을 기반으로 Type 인스턴스화

시나리오

Type 메소드를 사용하여 이름에 따라 Type을 인스턴스화 하는 방법의 예시

package subscriber가 설치된 패키지의 일부인 인터페이스의 custom implementation을 제공하는 경우

package는 subscriber의 org 내 custom setting을 통해 인터페이스를 구현하는 클래스의 이름을 가져올 수 있음

그 후 패키지는 이 클래스 이름에 해당하는 Type을 인스턴스화하고 subscriber가 구현한 메소드를 호출 할 수 있음

 

Vehicle interface

global interface Vehicle {
    Long getMaxSpeed();
    String getType();
}

 

Vehicle interface 구현

global class VehicleImpl implements Vehicle {
    global Long getMaxSpeed() { return 100; }
    global String getType() { return 'Sedan'; }
}

 

CustomerImplInvocationClass

이 클래스의 메소드는 custom 설정 값을 통해 Vehicle 인터페이스를 구현하는 클래스의 이름을 가져옴

그 후 newInstance 메소드를 호출하여 이 클래스를 인스턴스화 함

그 다음 VehicleImpl 에 구현된 메소드를 호출함

이 샘플에서는 className 텍스트 필드를 사용해 CustomImplement라는 public list custom setting을 만들어야 함

Vehicle의 데이터 세트 이름과 VehicleImpl의 클래스 이름 값을 사용하여 이 custom 설정에 대한 하나의 레코드를 만듦

public class CustomerImplInvocationClass {
    
    public class void invokeCustomImpl() {
    	//클래스 이름 custom setting에서 가져오기
        //이 클래스는 Vechile interface를 implement 함
        CustomImplementation__c cs = CustomImplementation__c.getInstance('Vehicle');
        
        //클래스 이름에 해당하는 Type 가져오기
        Type t = Type.forName(cs.className__c);
        
        //type 인스턴스화
        //인스턴스화된 object의 type은 인터페이스
        Vehicle v = (Vehicle)t.newInstance();
        
        //custom implementation을 가지는 메소드 호출
        System.debug('Max speed : ' + v.getMaxSpeed());
        System.debug('Vehicle type : ' + v.getType());
    }
}

 

 

Class Property

class property는 호출된 type의 System.Type 을 반환

forName 메소드 대신 사용 O

System.Type t = Integer.class;

JSON.deserializedeserializeStrictJSONParser.readValueAsreadValueAsStrict 메소드의 2번째 인수에 사용하여 역직렬화 할 object type을 가져올 수 있음

Decimal n = (Decimal)JSON.deserialize('100.1', Decimal.class);

 

 

 

 

 

 

 

 

 

 

※ 출처 : Apex Reference Guide

 

Type Class | Apex Reference Guide | Salesforce Developers

Returns true if an object reference of the specified type can be assigned from the child type; otherwise, returns false. Signature public Boolean isAssignableFrom(Type sourceType) Parameters sourceType The type of the object with which you are checking com

developer.salesforce.com

 

 

 

 

 

 

'Apex > Apex Basic' 카테고리의 다른 글

Apex basic 04_Trigger  (0) 2021.12.30
Apex basic 03_Apex&.Net  (0) 2021.12.29
Apex basic 02_Classes  (0) 2021.12.16
Apex basic 01  (0) 2021.12.16
Share Link
reply
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31