热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Java中是否有办法将HashSet<Class>参数移交给方法,以便该方法接受Class的子类的HashSets?

如何解决《在Java中是否有办法将HashSet<Class>参数移交给方法,以便该方法接受Class的子类的HashSets?》经验,为你挑选了1个好方法。

问题与解释

在Java中是否有办法将HashSet参数移交给方法,以便该方法接受HashSets的子类Class

如果有一个类的几个子类,这些子类的差异与所讨论的方法无关,那么这将非常有用.如果这是不可能的,那么处理这个的唯一选择似乎就是

编写与子类一样多的方法

循环遍历调用函数中的HashSet并调用类似的方法,将各个类实例作为参数而不是HashSets

......两者都不太实际.

版本是Java 8(openjdk 1.8.0).

假设所有文件都在同一目录中,这样我们就不必担心彼此导入的包和文件.考虑NNB类和子类NNC(NNB的子类).

NNB.java:

import java.util.HashMap;
import java.util.Map;


public class NNB {

    public final Map dict;

    public NNB () {
        this.dict = new HashMap();
        int c = 0;
        while (c<10) {
            Long XX = (long)10;
            Double YY = 2.0;
            this.dict.merge(XX, YY, Double::sum); 
            System.out.println(dict);
            c++;
        }
    }
}

NNC.java:

import java.util.HashMap;
import java.util.Map;


public class NNC extends NNB {

    private Map dict2;

    public NNC () {
        super();
        this.dict2 = new HashMap();
    }
}

现在假设,我们想要在NNB和NNC的实例列表上调用方法(例如,打印NNB.dictNNC.dict).

这不起作用NNA2.java::

import java.util.HashSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;

public class NNA2 {

    public void printDict(HashSet nnbs) {
        for (NNB nnb : nnbs) {
            System.out.println(nnb.dict);
        }
    }

    public static void main(String args[]) {
        NNA2 inst = new NNA2();
        HashSet x = new HashSet(Arrays.asList(new NNB()));
        HashSet y = new HashSet(Arrays.asList(new NNC()));

        inst.printDict(x);
        inst.printDict(y); //here it fails
        System.exit(0);
    }
}

错误:

NNA2.java:26: error: incompatible types: HashSet cannot be converted to HashSet
        inst.printDict(y);

这有效(但不是我们想要的,如果我们想要执行更复杂的操作,那将是不切实际的)NNA1.java::

import java.util.HashSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;

public class NNA1 {

    public void printOneDict(NNB nnb) {
        System.out.println(nnb.dict);
    }

    public static void main(String args[]) {
        NNA1 inst = new NNA1();
        HashSet x = new HashSet(Arrays.asList(new NNB()));
        HashSet y = new HashSet(Arrays.asList(new NNC()));

        for (NNB nnb : x) {
            inst.printOneDict(nnb);
        }

        for (NNC nnb : y) {
            inst.printOneDict(nnb);
        }

        System.exit(0);
    }
}

shmosel.. 5

如果我理解正确,你正在寻找:

public void printDict(HashSet nnbs) {
    // ...
}

另请参见List 是List 的子类?为什么Java的泛型不是隐式多态的?而什么是佩奇(生产者消费者扩展超)?



1> shmosel..:

如果我理解正确,你正在寻找:

public void printDict(HashSet nnbs) {
    // ...
}

另请参见List 是List 的子类?为什么Java的泛型不是隐式多态的?而什么是佩奇(生产者消费者扩展超)?


推荐阅读
author-avatar
安韦苇8
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有