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

我有以下 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_1T_2

实体之间没有业务关系T_1T_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能够而且将会出现关联到代表的实体MyClass

T将是同样的MyClassAnotherClass并且OtherClass因此,在一个实例只会有两种T_1T_2但从来没有同时在同一时间。

我的问题是,我有一个选择呢,这里比其他设计为一个接口MyClass,并实现它都T_1T_2

我可以实现类似的目标MyClass<T extends T_1 or T_2>吗?

亲切的问候


慕姐4208626
浏览 129回答 2
2回答

HUX布斯

可能这不是您正在寻找的,但您可以尝试一下:创建一个abstract实现所有内容的泛型类:public abstract class MyClass<T>{&nbsp; AnotherClass<T> another;&nbsp; OtherClass<T> other;&nbsp; // 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>{}

哈士奇WWW

我知道这不是一个很好的答案,但我不能把它作为对问题的评论。您可以通过尝试以下操作在运行时检查类型:public class MyClass<T>{&nbsp; // This factory-method creates an instance of the class if the correct type is passed&nbsp; // It throws a RuntimeException if not.&nbsp; public static <T> MyClass<T> getInstance(Class<T> type)&nbsp; {&nbsp; &nbsp; if (T_1.class.isAssignableFrom(type) || T_2.class.isAssignableFrom(type))&nbsp; &nbsp; &nbsp; return (new MyClass<T>());&nbsp; &nbsp; else&nbsp; &nbsp; &nbsp; throw new RuntimeException("Cannot create instance of MyClass<" + type.getName() + ">");&nbsp; }&nbsp; ...}然后class T_3 extends T_2{}....MyClass<T_3> test_1;test_1 = MyClass.getInstance(T_3.class); // This will succeedMyClass<String> test_2;test_2 = MyClass.getInstance(String.class); // Fails
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java