首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在泛型中使用ChronicleMap : java.lang.NoSuchMethodException: sun.nio.ch.FileChannelImpl.map0(int,long,long)

在泛型中使用ChronicleMap : java.lang.NoSuchMethodException: sun.nio.ch.FileChannelImpl.map0(int,long,long)
EN

Stack Overflow用户
提问于 2020-06-12 00:17:37
回答 1查看 197关注 0票数 0

我有以下类:

代码语言:javascript
运行
复制
public class ChronicleMapIndex<K, V> implements Index<K, V> {

    private ChronicleMap<K, V> index;
    private Map<String, String> characteristicsMap;

    public void buildIndex(String name, Map<String, String> characteristicsMap, Path indexPath, Class<?> keyType, Class<?> valueType){
        this.characteristicsMap = characteristicsMap;
        String filename = name + ".bin";
        Path indexFilePath = Paths.get(indexPath + filename);
        try {
            index = (ChronicleMap<K, V>) ChronicleMap
                    .of(keyType, valueType)
                    .name(name)
                    .entries(Long.parseLong(characteristicsMap.get("entries")))
                    .averageValueSize(Double.parseDouble(characteristicsMap.get("averageValueSize")))
                    .averageKeySize(Double.parseDouble(characteristicsMap.get("averageKeySize")))
                    .createOrRecoverPersistedTo(indexFilePath.toFile(), true);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public V get(K key) {
        return index.get(key);
    }

    @Override
    public void put(K key, V value) {
        index.put(key, value);
    }
}

我基本上想在一个包装器函数中存储一个编年史地图。这里,KV与传递的keyTypevalueType值相同。因此,我希望ChronicleMap映射具有与KV相同的键和值类型。

然而,当我创建它时,我得到了以下错误:

代码语言:javascript
运行
复制
net.openhft.chronicle.hash.ChronicleHashRecoveryFailedException: java.lang.AssertionError: java.lang.NoSuchMethodException: sun.nio.ch.FileChannelImpl.map0(int,long,long)

    at net.openhft.chronicle.map.ChronicleMapBuilder.openWithExistingFile(ChronicleMapBuilder.java:1877)
    at net.openhft.chronicle.map.ChronicleMapBuilder.createWithFile(ChronicleMapBuilder.java:1701)
    at net.openhft.chronicle.map.ChronicleMapBuilder.recoverPersistedTo(ChronicleMapBuilder.java:1655)
    at net.openhft.chronicle.map.ChronicleMapBuilder.createOrRecoverPersistedTo(ChronicleMapBuilder.java:1638)
    at net.openhft.chronicle.map.ChronicleMapBuilder.createOrRecoverPersistedTo(ChronicleMapBuilder.java:1629)
    at edu.upf.taln.indexer.index.chroniclemap.ChronicleMapIndex.buildIndex(ChronicleMapIndex.java:27)

在这一行中:

代码语言:javascript
运行
复制
                .createOrRecoverPersistedTo(indexFilePath.toFile(), true);

我想知道这个错误是不是因为我在泛型上做错了什么。

我在Windows10中使用的是ChronicleMap 3.19.4和JNA5.5.0。

下面是一个您可以轻松运行的单独测试:

代码语言:javascript
运行
复制
    Map<String, String> characteristicsMap = new HashMap<>();
    characteristicsMap.put("entries", Long.toString(123));
    characteristicsMap.put("averageKeySize", Integer.toString(5));
    characteristicsMap.put("averageValueSize", Integer.toString(5));
    String name = "test";
    Path indexPath = Paths.get("D:/trabajo"); // substitute this as needed
    ChronicleMapIndex<String, String> index = new ChronicleMapIndex<>();
    index.buildIndex(name, characteristicsMap, indexPath ,String.class, String.class);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-12 05:22:49

这与泛型无关。您正在使用Java 12+,但它不受支持。内部sun.nio.ch.FileChannelImpl在版本11到14之间发生了变化,并且不是向后兼容的。

我们的支持政策是只支持Java的LTS版本。我们现在支持的最高版本是Java 11,下一个LTS版本(TBC)是17,我们计划下一步支持这个版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62328831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档