我有以下Java问题
我有以下通用类,它们可能被描绘为:
public class MyClass<T> {
AnotherClass<T> another;
OtherClass<T> other;
...
}
其中
表示与案例无关的代码。
对于类
MyClass
>
另一个类
其他类
泛型类型是什么是绝对重要的,在运行时将在此基础上做出决策。
基于此,类型
T
不是完全任意的,它可以是类的层次结构T\u 1
的实例,也可以是类的层次结构T\u 2
。
根据类的定义,类型
T
相当于Object
,但我知道它相当于T\u 1
或T\u 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
都可以并且将与MyClass
中表示的实体相关联
T
对于MyClass
、OtherClass
和OtherClass
将是相同的,因此在一个实例中,只有T\u 1
或T\u 2
,但决不能同时存在。
我的问题是,除了为
MyClass
设计一个接口并为T_1
和T_2
实现它之外,我还有哪些选择?。
我可以实现像MyClass这样的功能吗
问候
我知道这不是一个很好的答案,但我不能把它作为对问题的评论
您可以通过尝试以下操作在运行时检查类型:
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
也许,这并不完全是您想要的,但您可以尝试一下:
创建一个实现所有内容的抽象
泛型类:
public abstract class MyClass<T>
{
AnotherClass<T> another;
OtherClass<T> other;
// Add any code needed
}
然后为两个基类创建两个泛型类。
如果所有代码都可以在抽象类中实现,这些类可能是空的:
public class MyT1Class<T extends T_1> extends MyClass<T>
{
}
public class MyT2Class<T extends T_2> extends MyClass<T>
{
}
问题是: 创建一个名为Duo的泛型类,它有两个参数a和B。声明一个名为a类型的第一个变量,以及一个名为B类型的第二个变量。创建一个接受这两个参数的构造函数。在构造函数中,将这些参数分别分配给声明的变量。 这是我能想到的解决方案: 然后,当我继续问下一个问题时,我被绊住了。问题是: 使用问题4中的Duo类声明并创建两个对象,如下所示: a) 第一个名为sideShape的对象分别由字符串类型和整数类
据我解释,可以用任何表示,其中是或的超级类。同样的逻辑适用于也是。那么是?
我在注释中创建一些元数据结构时遇到了问题。我们使用注释来定义Hibernate实体属性的特殊属性,但它可能在任何地方都可以使用。我想创建表示这些结构的条件: 问题是我需要使用此注释定义一些“树”结构。这是我想达到的一些设计: 我想根据这个例子使用的所有这些注释: 我知道我在上面的注释定义中定义的那种继承是不可能的。但是,我该如何考虑我的注释和,或是在一个“家庭”中?
问题内容: 所以我有一张地图: 我会像这样添加元素: 我有如下通用方法: 现在,这段代码可以很好地工作,并且没有编译器问题: 但是,当我尝试这样做时: 编译器向我显示以下警告:类型安全:通用方法verifyType(String,Class)的未经检查的调用verifyType(String,Class) 这让我感到困惑…请帮助… 问题答案: 更改: 至 通过仅将类型声明为“ Class”,就失去
我正在处理一个需求。当前有一个搜索页面,其中包含值(示例数据)1)Employee和2)Sport Person的列表框。 对象层次结构(Hibernate Bean)Person是实际对象,它具有两个不同的类1)Employee和2)基于Sports Person的鉴别器列 Person_Type(鉴别器列)。 在搜索页面上,如果用户选择任何一个列表框,将从该子类中得到数据。 现在的要求是同时显
查看某个方法在哪个类中定义,在哪些类中实现 操作步骤: 菜单栏: Navigate —> Method Hierarchy 快捷键: Mac: Shift + Command + H Windows\/Linux: Ctrl + Shift + H