자바 기초 반사 와 범 형 및 주해
범용 지우 기
범 형 지우 기:범 형 은 컴 파일 시기 에 만 유효 하 며 컴 파일 된 바이트 파일 에는 범 형 정보 가 존재 하지 않 습 니 다.
일반 집합 을 설명 하고,집합 양 끝 유형 은 일치 해 야 합 니 다.유형 도 포장 유형 을 사용 할 수 있 고 일반적인 유형 은 인용 유형 이 어야 하 며 기본 유형 이 될 수 없습니다.
공용 의 유형 과 방법 을 실현 하여 공용 업 무 를 추출 하 다.
범 형 방법/범 형 류/범 형 인터페이스
public class GenericTest
{
/**
* ,
* @param <T>
* @param <K>
* @param t
* @param k
*/
public <T, K> K save(T t, K k)
{
return null;
}
@Test
public void testMethod() throws Exception
{
// : ,
save("hello", 1);
}
}
:
public class GenericTest<T>
@Test
public void testMethod() throws Exception
{
// : ,
//save("hello", 1);
// :
GenericTest<String> demo = new GenericTest<String>();
demo.save("hello", 1);
}
범 형 중의 extends 와 슈퍼 의 의미:Extends:정의 목록;들 어 오 는 인자?String 형식의 하위 클래스 여야 합 니 다.그렇지 않 으 면 잘못 보고 할 수 있 습 니 다.
Super:정의 List;들 어 오 는 매개 변 수 는 String 형식의 부모 클래스 여야 합 니 다.그렇지 않 으 면 잘못 보고 할 수 있 습 니 다.
Type:인터페이스,모든 종류의 기본 인터페이스!
반사
반 사 는 실행 시기 에 동적 으로 대상 을 만 들 고 대상 의 속성,방법 을 얻 을 수 있 습 니 다.
/**
* @ClassName: App
* @Description:
* @author lqw
* @date 2016-5-13 01:33:55
*
*/
public class App
{
@Test
public void testInfo() throws Exception
{
//
String sql = "com.hbmy.reflect.demo2.Admin";
//
Class<?> clazz = Class.forName(sql);
/**
* 1: ( )
*/
Admin admin = (Admin) clazz.newInstance();
/**
* 2:
*/
Constructor<?> constructors = clazz.getDeclaredConstructor();
constructors.newInstance();
/**
* 3:
*/
Constructor<?> constructor = clazz.getDeclaredConstructor(String.class);
Admin admin2 = (Admin) constructor.newInstance("zhangsan");
// System.out.println(admin);
}
/**
* 、
* getDeclaredFields:
* getFields: public
*/
@Test
public void testNameAndValue() throws Exception
{
//
String sql = "com.hbmy.reflect.demo2.Admin";
//
Class<?> clazz = Class.forName(sql);
Admin admin = (Admin) clazz.newInstance();
// Method[] methods = clazz.getMethods();
// for (Method method : methods)
// {
// //
// method.setAccessible(true);
// //
// String name = method.getName();
// System.out.println(name);
//
// }
// Field[] fields = clazz.getFields();// money
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields)
{
//
field.setAccessible(true);
//
String name = field.getName();
Object value = field.get(admin);
System.out.println(name + value);
}
}
/**
*
*/
@Test
public void testGetMethods() throws Exception
{
//
String sql = "com.hbmy.reflect.demo2.Admin";
//
Class<?> clazz = Class.forName(sql);
Admin admin = (Admin) clazz.newInstance();
/*
*
*/
Method declaredMethod = clazz.getDeclaredMethod("getId");
/**
*
*/
Object return_value = declaredMethod.invoke(admin);
System.out.println(return_value);
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods)
{
method.setAccessible(true);
String name = method.getName();
System.out.println(name);
}
}
주해주해 적 역할
1.컴 파일 러 가 어떻게 작 동 하 는 지 알려 준다.
2.프로필 간소화(대체)
public class App
{
@Override
public String toString()
{
return super.toString();
}
@SuppressWarnings({"unused","unchecked"})
public void save()
{
List list = null;
}
@Deprecated
public void save1()
{
}
}
사용자 정의 주석:사용자 정의 주석 을 통 해 클래스,필드,방법 에 설명 정 보 를 추가 할 수 있 습 니 다.
public @interface Author
{
/**
*
* 1. public
* 2.
* 3. value, ,
*/
String name() default "lqw";
//
int age() default 23;
String remark();
}
원 주해원 주 해 는 바로 주해 의 주해 이다.
@Target({
TYPE,
FIELD,
METHOD,
PARAMETER,
CONSTRUCTOR,
LOCAL_VARIABLE})
/**
* 2:
* RetentionPolicy.SOURCE
* RetentionPolicy.CLASS
* RetentionPolicy.RUNTIME
*/
@Retention(RetentionPolicy.SOURCE)
마지막 으로 한 마디 를 요약 한다.주해 와 반 사 는 어렵 지 않다.두 렵 지 않 으 면 주 해 는 소스 코드 를 보면 그렇다.반사 까지 는.이렇게 말 하면 반사 가 없 으 면 틀 이 없고 거의 모든 틀 이 반 사 를 통 해 이 루어 진다.말하자면 반사 란 로 딩 류 의 바이트 코드 를 통 해 클래스 안의 방법 과 속성 을 얻 는 것 이 고 사실은 구조 도 이렇게 이 루어 진 것 이다.읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.