아 날로 그 IOC

4754 단어 Java
From 실험 동 제10 기 자바 루 경기 - 모 의 IOC 문제.
수요
클래스 ShiyanlouImpl 을 보완 하여 toUp (String name) 방법 을 실현 합 니 다. toUp 방법 은 들 어 오 는 문자열 을 대문자 로 바 꾸 고 되 돌려 줍 니 다. 예 를 들 어 들 어 shiyanlou 로 들 어 오 는 것 은 SHIYANLOU 입 니 다.
Main 클래스 의 ioc (String className, Shiyanlou s, String methodName, String name) 방법 을 보완 하여 기능 을 실현 합 니 다. 1. className 클래스 인 스 턴 스 를 반사 적 으로 생 성 합 니 다.2. className 인 스 턴 스 의 Shiyanlou 형식 변 수 를 찾 아 set 방법 으로 인자 s 를 주입 합 니 다.3. 그리고 className 의 methodName 방법 을 호출 하여 name 인 자 를 입력 합 니 다.
제시 하 다.
이상 처리 주의;set 방법 으로 주입 하 는 것 을 주의 하 십시오.
Shiyanlou.java
public interface Shiyanlou {
    public String toUp(String name);
}

ShiyanlouImpl. java toUp 함수
public class ShiyanlouImpl implements Shiyanlou{
    @Override
    public String toUp(String s) {
        try {
            return s.toUpperCase();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            return null;
        }
    }
}

Main.java
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Main {
    // TODO
    public static void  ioc(String className,Shiyanlou s,String methodName, String name){
        try {
            //    +       
            Class> myClass = Class.forName(className);
            //getDeclaredFields             ( )
            Field [] fields = myClass.getDeclaredFields();
            //      
            Object obj = myClass.newInstance();
            for (int i = 0; i < fields.length; ++i) {
            //       Shiyanlou   ,
                if (Shiyanlou.class.isAssignableFrom(fields[i].getType())) {
                //    "setShiyanlou"    
                    String setName = "set" + fields[i].getName().substring(0, 1).toUpperCase() + 
                            fields[i].getName().substring(1);
                            //  set    
                    Method method1 = myClass.getMethod(setName, Shiyanlou.class);
                    method1.invoke(obj, s);
                }
            }
            Method method2 = myClass.getMethod(methodName, String.class);
            method2.invoke(obj, name);

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

비교:
Class 1. isAssignableFrom (Class 2) 반환 값: true: 두 종류 가 같 거나 class 1 이 class 2 의 부모 클래스 또는 실 현 된 인터페이스
class 1 instanceof Class 1 반환 값: true: class 1 은 Class 1 의 인 스 턴 스 또는 하위 클래스 의 인 스 턴 스 입 니 다.

좋은 웹페이지 즐겨찾기