java 범용 상세 정보

4961 단어 java범용
먼저 다음 코드를 참조하십시오.

public class generictype {
 public static void main(String str[]) {
  Hashtable h =new Hashtable();
  h.put(1, "String ");
  int a = (String) h.get(1);
  System.out.println(a);
 }
}
// 
String 
// String int ( ):
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
 at genetictype.generictype.main(generic1.java:10)
이상은 강제 형식 변환이 가져올 수 있는 전형적인 오류입니다. 그러나 이 오류는 컴파일하는 동안 알 수 없기 때문에 실행 중 jvm 검사 후 형식 변환 이상을 던집니다.
다음 코드를 참조하십시오.

public class generictype { 
 public static void main(String str[]) {  
 Hashtable<Integer, String> h = new Hashtable<Integer, String>();
  h.put(1, "String ");
  String a= h.get(1);
  System.out.println(a);
 }
}
// 
string 
// 1. String int, 
   2. h.get(1) 。
종합적으로 볼 때 범형의 역할은 다음과 같다.
1. 컴파일할 때 유형의 안전을 검사(java에서 강제 유형 변환으로 인한 오류를 해결)하고 컴파일러에게 커다란 사명을 맡긴다. 
2. 코드의 재사용률 향상
유형 삭제:
유형 지우기는 컴파일러가 컴파일하는 것을 말한다.자바 파일을 만들 때 클래스의 범용 매개 변수를 제거하면 jvm에서 바이트 파일을 불러올 때 범용 파일을 볼 수 없습니다. 이 과정을 형식 지우기라고 합니다.
유형 지우기와 관련된 현상:
(1) 범용 클래스에 클래스가 없는 클래스 유형.예를 들어 List이 존재하지 않습니다.class 또는 List.class, 오직 List.class.
(2) 정적 변수는 범용 클래스의 모든 실례에 의해 공유된다.

public class generictype 
{
 public static void main(String str[]){
  test1<String> t = new test1<String>();
  test1<Date> tt = new test1<Date>();
  System.out.println(t.a);
  System.out.println(tt.a);
 }
}
class test1<T>{
 static int a = 1;
}
// 
1
(3) 범주형 형식의 매개 변수 오류는 이상 처리를 통해 처리할 수 없습니다. 이상 처리는 jvm에서 이루어진 것이기 때문에 jvm에 불러온 바이트 파일은 범주형 특징을 지웠습니다. 이것은 범주형의 의미를 간접적으로 설명합니다. 컴파일하는 동안 매개 변수 형식 오류를 발견했습니다.
유형 삭제의 기본 절차도 비교적 간단하다.
 1.유형 매개 변수를 최상위 상위 클래스로 대체합니다. 이 클래스는 일반적으로 Object입니다. 유형 매개 변수의 상계를 지정하면 이 상계를 사용합니다.
 2.나타나는 유형 설명을 제거하면 <>의 컨텐트가 제거됩니다.
예를 들어 Tget() 메서드는 Object get()이 됩니다.List이 List가 됩니다.다음은 브리지 방법 (bridge method) 을 만들어야 할 수도 있습니다.이것은 유형을 지운 후의 클래스에 필요한 방법이 부족할 수 있기 때문이다.예를 들어 다음 코드를 고려합니다.

public class generictype {public static void main(String str[]) {
  test3 t =new test3();
   t.getT("11111");
 }
}
interface test2<T>{
 public T getT(T t);
}
class test3 implements test2<String>{
 public String getT(String t){
  return t;
 }
}
// 
public class generictype {
 public static void main(String str[]) {
  test3 t = new test3();
  t.getT("11111");
 }
 interface test2 {
  public Object getT(Object t);
 }
 class test3 implements test2 {
 public String getT(String T){
   return T }
 public Object getT(Object t) {
  return this.getT((String) t);
  }// , test3 test2 , , , 。
}
범용 분류: 범용 클래스, 범용 인터페이스, 범용 방법, 범용 이상
범형류

public class generictype {
 public static void main(String str[]) {
  test<Integer, String> t = new test<Integer, String>();
  t.put(1, "str1");
  t.put(2, "str2");
  System.out.println(t.get(1));
  System.out.println(t.get(2));
 }
}
class test<T, V> {
 public Hashtable<T, V> h = new Hashtable<T, V>();
 public void put(T t, V v) {
  h.put(t, v);
 }
 public V get(T t) {
  return h.get(t);
 }
}
// 
str1
str2
다태적 방법(범용 방법): 함수 이름 앞에서 범용 파라미터를 정의하여 전송된 파라미터 목록, 반환값 유형, 방법체에서 인용할 수 있다

public class generictype {
public <T> String getString(T obj){
 return obj.toString();
}
 public static void main(String str[]) {
  generictype g =new generictype ();// 
  System.out.println(g.getString(1));
  System.out.println(g.getString('a'));
  System.out.println(g.getString("a"));
 }
}
// 
a
a
범용 이상 (범용 인터페이스 포함)

public class generictype {
 public static void main(String str[]) {
 TestException t =new TestException();
 try {
  t.excute(2);
 } catch (IOException e) {
  e.printStackTrace();
 }
 }
}
//extends Exception
interface TestExceptionInterface<T extends Exception>
{
 public void excute(int i) throws T;
}
class TestException implements TestExceptionInterface<IOException>{
 @Override
 public void excute(int i) throws IOException {
 if(i<10){
  throw new IOException();
 }
 }
}
// :1. , 。
  2. , throws , 
이상은 본문의 전체 내용입니다. 본고의 내용이 여러분의 학습이나 업무에 일정한 도움을 줄 수 있는 동시에 저희를 많이 지지해 주시기 바랍니다!

좋은 웹페이지 즐겨찾기