为了账号安全,请及时绑定邮箱和手机立即绑定

具有两个类层次结构的通用类

具有两个类层次结构的通用类

慕姐4208626 2021-09-03 10:13:01
我有以下 Java 泛型问题我有以下通用类,可以概括为:public class MyClass<T> {    AnotherClass<T> another;    OtherClass<T> other;    ...}where...代表与案例无关的代码。对于类MyClass<T>来说,哪个确切类型T(截至目前)并不重要,但对于两者来说:AnotherClass<T>OtherClass<T>是绝对关键的是什么泛型类型和决定在运行时将在该基地进行。基于此,类型T不是完全任意的,它可以是类层次结构的实例,也可以是类T_1层次结构T_2。根据类的定义,该类型T等效于Object但我知道它等效于T_1或T_2实体之间没有业务关系T_1,T_2因此我不做:public interface BaseT { ... }public class T_1 implements BaseT { ... }public class T_2 implements BaseT { ... }public class MyClass<T extends BaseT>如果它们不相关,为什么要使用泛型的说明:我确定,因为即使他们是不相关的显式(试图)泛型类两种,还有是因为既有隐含关系T_1,并 T_2能够而且将会出现关联到代表的实体MyClassT将是同样的MyClass,AnotherClass并且OtherClass因此,在一个实例只会有两种T_1或T_2但从来没有同时在同一时间。我的问题是,我有一个选择呢,这里比其他设计为一个接口MyClass,并实现它都T_1和T_2?我可以实现类似的目标MyClass<T extends T_1 or T_2>吗?亲切的问候
查看完整描述

2 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

可能这不是您正在寻找的,但您可以尝试一下:


创建一个abstract实现所有内容的泛型类:


public abstract class MyClass<T>

{

  AnotherClass<T> another;

  OtherClass<T> other;


  // Add any code needed


}

然后为两个基类创建 2 个泛型类。

如果所有代码都可以在抽象类中实现,则这些类可能为空:


public class MyT1Class<T extends T_1> extends MyClass<T>

{

}


public class MyT2Class<T extends T_2> extends MyClass<T>

{

}


查看完整回答
反对 回复 2021-09-03
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

我知道这不是一个很好的答案,但我不能把它作为对问题的评论。

您可以通过尝试以下操作在运行时检查类型:


public class MyClass<T>

{

  // This factory-method creates an instance of the class if the correct type is passed

  // It throws a RuntimeException if not.

  public static <T> MyClass<T> getInstance(Class<T> type)

  {

    if (T_1.class.isAssignableFrom(type) || T_2.class.isAssignableFrom(type))

      return (new MyClass<T>());

    else

      throw new RuntimeException("Cannot create instance of MyClass<" + type.getName() + ">");

  }


  ...


}

然后


class T_3 extends T_2

{

}


....


MyClass<T_3> test_1;

test_1 = MyClass.getInstance(T_3.class); // This will succeed


MyClass<String> test_2;

test_2 = MyClass.getInstance(String.class); // Fails


查看完整回答
反对 回复 2021-09-03
  • 2 回答
  • 0 关注
  • 126 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信