Java泛型,紧密有界参数类型

 KING逊咖 发布于 2023-02-11 17:13

我希望有一种方法具有类似于method(T1 t1, T2 t2) T2是-T1和/或T1是-T2 的签名 .我不希望T1和T2都是T的情况,但两者都不是 - 另一个.我希望最允许的类型在继承树中以T1或T2的最高值为界.我使用的是Java 6.

下面是尝试显示一些所需的用例

class Experiment
{
  static List genericList = new ArrayList();
  static ArrayList arrayList = new ArrayList();

  static class Test1 { }
  static class Test2 extends Test1 { }
  static class Test3 extends Test1 { }

  static  T experiment0(T expected, T actual)
  {
    return actual;
  }

  /** Almost works, but want arbitrary ordering. Cannot overload due to erasure. */
  static  S experiment1(T expected, S actual)
  {
    return actual;
  }

  private static void experimentDriver()
  {
    // good, allowed
    List l = experiment0(genericList, arrayList);

    // bad, allowed; want compile-time error
    Object o = experiment0(new String(), new Integer(0));


    // good, allowed
    Test1 test1 = experiment1(new Test1(), new Test3());
    String string = experiment1(new String(), new String());
    List list = experiment1(genericList, new ArrayList());

    // good, disallowed
    experiment1(new Test2(), new Test3());
    experiment1(new Test3(), new Test2());
    experiment1(new Integer(0), new String());
    experiment1(new ArrayList(), new LinkedList());

    // bad, disallowed; want either order
    experiment1(new Test3(), new Test1());
    experiment1(new ArrayList(), genericList);
  }
}

我知道我可以用签名来实现类似的东西, experiment(Class clazz, T expected, T actual) 但这会迫使程序员明确提到允许的最高类型,当我想用​​语言推断它时.

请注意,较近的解决方案不能简单地过载,因为它们的擦除是相同的.

我希望我已经提供了足够的信息来传达我想要的东西.我意识到这在Java中可能是不可能的,但我希望它是可行的.这也是我在这个论坛上的第一个问题,所以如果我在不知不觉中违反任何规则,我会提前道歉并感谢您的耐心等待!

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有