Java 如何围绕Map创建泛型类<;K、 V>;在爪哇

Java 如何围绕Map创建泛型类<;K、 V>;在爪哇,java,generics,dictionary,Java,Generics,Dictionary,我不熟悉java和java泛型,我想使用java的映射创建一个通用的doubleBuffer类 代码是: import java.util.Random; import java.util.concurrent.locks.ReentrantLock; import java.util.Map; import java.util.HashMap; class DoubleMap<K, V, M extends Map<K, V>> { private Reentr

我不熟悉java和java泛型,我想使用java的映射创建一个通用的doubleBuffer类

代码是:

import java.util.Random;
import java.util.concurrent.locks.ReentrantLock;
import java.util.Map;
import java.util.HashMap;
class DoubleMap<K, V, M extends Map<K, V>> {
    private ReentrantLock lock = new ReentrantLock();
    private M frontend, backend;

    public DoubleMap() {
        frontend = new M<K, V>();
        backend = new M<K, V>();
    }   

    public void put(K k, V v) {
        lock.lock();
        frontend.put(k, v); 
        lock.unlock();
    }   

    public Map<K, V> getBackend() {
        lock.lock();
        Map<K, V> ret = backend;
        backend = frontend;
        frontend = new M<K, V>();
        lock.unlock();
        return ret;
    }   
}
public class DoubleMapTest implements Runnable {
    static DoubleMap<Integer, Integer, HashMap<Integer, Integer>> map = new DoubleMap<Integer, Integer, HashMap<Integer, Integer>>();
    public void run() {
        Random rand = new Random();
        while (true) {
            map.put(rand.nextInt(), rand.nextInt());
            try {
                Thread.sleep(200);
            } catch (InterruptedException ex) {
                Thread.currentThread().interrupt();
            }   
        }   
    }   

    public static void main(String[] args) {
        DoubleMapTest test = new DoubleMapTest();
        Thread t = new Thread(test);
        t.start();
        while (true) {
            Map<Integer, Integer> toMerge = map.getBackend();
            for (Map.Entry<Integer, Integer> entry : toMerge.entrySet()) {
                System.out.println(entry.getKey() + " = " + entry.getValue());
            }   
            try {
                Thread.sleep(500);
            } catch (InterruptedException ex) {
                Thread.currentThread().interrupt();
            }
        }
    }
}
import java.util.Random;
导入java.util.concurrent.locks.ReentrantLock;
导入java.util.Map;
导入java.util.HashMap;
类双映射{
private ReentrantLock lock=new ReentrantLock();
私有M前端、后端;
公共双地图(){
前端=新的M();
后端=新的M();
}   
公开作废认沽权(K,V){
lock.lock();
前端放置(k,v);
lock.unlock();
}   
公共映射getBackend(){
lock.lock();
Map ret=后端;
后端=前端;
前端=新的M();
lock.unlock();
返回ret;
}   
}
公共类DoubleMapTest实现可运行{
静态DoubleMap=新的DoubleMap();
公开募捐{
Random rand=新的Random();
while(true){
map.put(rand.nextInt(),rand.nextInt());
试一试{
睡眠(200);
}捕获(中断异常例外){
Thread.currentThread().interrupt();
}   
}   
}   
公共静态void main(字符串[]args){
DoubleMapTest test=新的DoubleMapTest();
螺纹t=新螺纹(试验);
t、 start();
while(true){
Map-toMerge=Map.getBackend();
对于(Map.Entry:toMerge.entrySet()){
System.out.println(entry.getKey()+“=”+entry.getValue());
}   
试一试{
睡眠(500);
}捕获(中断异常例外){
Thread.currentThread().interrupt();
}
}
}
}
当我编译它时,我得到了这个错误消息

java:10:错误:意外类型 前端=新的M(); ^必需:找到的类:类型参数M,其中M、K、V是类型变量: M扩展类DoubleMap中声明的映射 扩展类DoubleMap中声明的对象 V扩展类DoubleMap DoubleMapTest中声明的对象。java:11:错误:意外类型 后端=新的M(); ^必需:找到的类:类型参数M,其中M、K、V是类型变量: M扩展类DoubleMap中声明的映射 扩展类DoubleMap中声明的对象 V扩展类DoubleMap DoubleMapTest.java:24:错误:意外类型frontend=new M()中声明的对象; ^必需:找到的类:类型参数M,其中M、K、V是类型变量: M扩展类DoubleMap中声明的映射 扩展类DoubleMap中声明的对象 V扩展类DoubleMap 3错误中声明的对象


您不能使用
new
在java中创建泛型类型的实例,因为 这就是为什么你的程序有错误


请看一下这篇文章,这样您就不能使用
new
在java中创建泛型类型的实例,因为 这就是为什么你的程序有错误

看看这篇文章