编辑:我改变了一些例子,以获得想法:
喜欢
<Integer or Float>
…而无需创建公共接口并为Integer和Float创建子类来实现它
如果没有,类似这样的东西可能会更有意义并且有用
<E extends Number> <E = (Integer|Float)>
如果呢?是一个通配符,为什么我们不应该限制某些类型?
在非常极端的情况下(没有的Java
7之前的版本AutoCloseable
),我也希望能够做到这一点。例如
<E extends Connection or Statement or ResultSet>
E.close()
不管实际的类型是什么,这都允许我打电话。换句话说,E
将包含所有提供的类型的“
API交集”。在这种情况下,将含有close()
,并从所有方法java.sql.Wrapper
和java.lang.Object
。
但不幸的是,您无法做到这一点。而是使用方法重载,例如
void close(Connection c);
void close(Statement s);
void close(ResultSet r);
还是普通的 instanceof
if (obj instanceof Connection) {
((Connection) obj).close();
}
else if (obj instanceof Statement) { //...
或修复您的设计,因为无论如何您不必交叉任何类型的API
我的问题标题有点模糊,但本质上我想实现以下几点: struct Foo实现行为A和行为B和行为C 结构栏实现行为A Foo和Bar都实现了一些Content特性 从一个
问题内容: 在C#中,我实际上可以这样做: 但是由于某种原因,我无法使其在Java中工作。 我要做的是在超类上创建一个静态方法,以便可以将子类转换为XML。 问题答案: 称为: 或更明确地: 更令人困惑的是,您可以拥有既构造泛型类型又具有泛型参数的构造函数。不记得该语法,也从未在愤怒中使用过它(无论如何,最好还是使用静态创建方法)。 强制转换是不安全的,并且您不能编写T.class。因此,将T.c
问题内容: 如果在Java中创建泛型类(该类具有泛型类型参数),则可以使用泛型方法(该方法带有泛型类型参数)吗? 考虑以下示例: 正如您对通用方法所期望的那样,我可以使用任何对象调用的实例: 但是,如果我尝试使用 不 指定泛型类型的实例,则无论传入什么,我都会调用返回, 奇怪的是,如果返回类型是通用类,它将编译(例如(实际上,这可以解释-参见下面的答案)): 此外,如果输入通用类,即使仅使用通配符
如果在Java中创建泛型类(该类具有泛型类型参数),是否可以使用泛型方法(该方法采用泛型类型参数)? 考虑下面的例子: 正如您所期望的那样,对于任何对象,的实例,我都可以调用: 但是,如果我试图使用的实例而不指定泛型类型,那么调用将返回一个
问题内容: 背景 我对 Java泛型的 理解是它完全是一个 编译时 功能(主要侧重于类型安全检查)。任何泛型类的类型信息在运行时都会丢失( 类型擦除 )。 不过,我看到许多框架 似乎 也在运行时利用类型信息。例如,google guice Providers。guice提供程序可以在运行时实例化并提供其通用类型的新实例。 题 是否还有与泛型类型相关的信息,这些信息也会在运行时保留。? 如果 是 ,
我试图用Mockito 1.9.5模拟一个类,但是我很难让它工作。 我写了我的测试样板: ...并得到一个长的< code>ClassCastException: 线程“main”java.lang.ClassCastException中的异常:org.mockito.internal.creation.jmock.ClassImposterizer$ClassWithSuperclassToWo