>  기사  >  Java  >  여러 Java 일반 예제 공유

여러 Java 일반 예제 공유

高洛峰
高洛峰원래의
2017-01-18 11:00:051255검색

1. 일반 클래스

1.1 일반 일반

package test.lujianing;
/**
 * 泛型类
 * @param <T>
 */
class Test<T>{
    private T obj;
    public void setValue(T obj){
        this.obj =obj;
    }
    public T getValue(){
        System.out.println(obj.getClass().getName());
        return obj;
    }
}
/**
 * 测试泛型类
 */
public class TestOne {
    public static void main(String[] args) {
        //测试Integer泛型
        Test<Integer> t1 = new Test<Integer>();
        t1.setValue(5);
        Integer i = t1.getValue();
        System.out.println(i);
        //测试Double泛型
        Test<Double> t2 = new Test<Double>();
        t2.setValue(5.55D);
        Double d = t2.getValue();
        System.out.println(d);
        //测试String泛型
        Test<String> t3 = new Test<String>();
        t3.setValue("hello world");
        String str =t3.getValue();
        System.out.println(str);
    }
}

출력 결과:

java.lang.Integer
5
java.lang.Double
5.55
java.lang.String
hello world

1.2 K/V 일반

package test.lujianing;
import java.util.HashMap;
import java.util.Map;
/**
 * Created by Administrator on 14-3-30.
 */
class TestKV<K,V>{
    private Map<K,V> map=new HashMap<K, V>();
    public void put(K k, V v) {
        map.put(k,v);
    }
    public V get(K k) {
        return map.get(k);
    }
}
public class TestFour{
    public static void main(String[] args) {
        TestKV<String,String> t = new TestKV<String, String>();
        t.put("name","jianing");
        System.out.println(t.get("name"));
        TestKV<String,Integer> t2 = new TestKV<String, Integer>();
        t2.put("age",24);
        System.out.println(t2.get("age"));
    }
}

출력 결과:

jianing
24

2. 일반 인터페이스

package test.lujianing;
/**
 * 泛型接口
 * @param <T>
 */
public interface TestImpl<T> {
    public void setValue(T t);
    public T getValue();
}

출력 결과:

1
hello word

3. 일반 메서드

package test.lujianing;
/**
 * 泛型方法类
 */
class TestMethod{
    /**
     * 泛型方法
     */
    public <T>T getValue(Object s,Class<T> clazz) {
        System.out.println(clazz.getName());
        T t =null;
        if(clazz.getName().equals("java.lang.Integer")){
            Double d = Double.parseDouble(s.toString());
            int i =d.intValue();
            t=(T)new Integer(i);
        }
        if(clazz.getName().equals("java.lang.Double")){
            t=(T)new Double(s.toString());
        }
        return t;
    }
}
/**
 * 泛型方法测试类
 */
public class TestThree {
    public static void main(String[] args) {
        TestMethod t = new TestMethod();
        int i =t.getValue("30.0011",Integer.class);
        System.out.println(i);
        double d  =t.getValue("40.0022",Double.class);
        System.out.println(d);
    }
}

출력 결과:

java.lang.Integer
30
java.lang.Double
40.0022

4. generics

위의 예에서는 Test 유형 홀더 T의 범위에 제한이 없으며 기본 제한 유형은 Object와 동일합니다. 예를 들어, T를 디지털 인터페이스 유형으로 제한하고 싶습니다. 이렇게 하면 됩니다. 클래스 Test 이렇게 하면 클래스의 일반 T는 Number 인터페이스의 구현 클래스만 될 수 있습니다.

5. 와일드카드 제네릭

package test.lujianing;
import java.util.HashMap;
import java.util.Map;
/**
 * 通配泛型
 */
public class TestFive {
    public static void main(String[] args) {
        Map<String,Class<? extends Number>> map = new HashMap<String,Class<? extends Number>>();
        map.put("Integer",Integer.class);
        map.put("Double",Double.class);

        for (Map.Entry<String,Class<? extends Number>> entry : map.entrySet()) {
            System.out.println("key:" + entry.getKey() + " value:" + entry.getValue());
        }
    }
}

출력 결과:

key:Double value:class java.lang.Double
key:Integer value:class java.lang.Integer

간단한 예: 1.1의 예

public static void main(String[] args) {
        //测试Integer泛型
        Test<Integer> t1 = new Test<Integer>();
        t1.setValue(5);
        fun(t1);
        //测试Double泛型
        Test<Double> t2 = new Test<Double>();
        t2.setValue(5.55D);
        fun(t2);
    }
    public static void fun(Test<?> t){
        System.out.println("通配泛型"+t.getValue());
    }

출력 결과:

java.lang.Integer
通配泛型5
java.lang.Double
通配泛型5.55

6. 보충

generic에서는 8742468051c85b06f0a0af9e3e506b5c1a4db2c2c2313771e5742b6debf617a1 등을 만날 수 있습니다. T와 E는 각각 Type과 Element의 첫 글자입니다. E는 일반적으로 List 인터페이스의 정의와 같이 컬렉션 유형의 요소 유형을 나타내는 데 사용됩니다. 공개 인터페이스 List1a4db2c2c2313771e5742b6debf617a1는 Collection1a4db2c2c2313771e5742b6debf617a1를 확장합니다. 이는 단지 명명 규칙일 뿐이며 둘 사이에는 본질적인 차이가 없습니다.

더 많은 Java 일반 예제 및 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.