Tag: generics

如何从Java 8中的getAnnotatedParameterTypes()获取generics类型信息?

似乎getAnnotatedParameterTypes()返回一个包含原始类型而不是generics类型的AnnotatedType数组。 例如: public void genericMethod(T t) { } @Test public void testAnnotatedTypes() throws ReflectiveOperationException { Method method = getClass().getMethod(“genericMethod”, Object.class); Type type = method.getGenericParameterTypes()[0]; assertTrue(type instanceof TypeVariable); AnnotatedType annotatedType = method.getAnnotatedParameterTypes()[0]; // This fails; annotatedType implements only AnnotatedType assertTrue(annotatedType instanceof AnnotatedTypeVariable); // This fails too; type is a TypeVariable while annotatedType.getType() is // Object.class assertEquals(type, […]

JPA和generics

我想知道带有generics的抽象类如何处理JPA? 我的意思是我需要什么样的注释? 考虑这些: @MappedSuperclass public abstract class AbstractMyClass { // What about Strings and Integers? Do I need some kind of @LOB? private T field; public T getField() { return field; } public void setField(T field) { this.field = field; } } 然后是这些 @Entity @Table(name = “String”) public class MyStringClass extends AbstractMyClass { } @Entity […]

Java中的通用方法参数的getClass()

以下Java方法无法编译: void foo(T t) { Class klass = t.getClass(); } 收到的错误是:类型不匹配:无法转换为Class Class为Class Class 有人可以解释为什么Class Class无效,但Class Class ? Javadoc说: 实际的结果类型是Class Class where | X | 是擦除调用getClass的表达式的静态类型。 例如,此代码片段中不需要强制转换: Number n = 0; Class c = n.getClass();

从Scala实现具有Raw类型的Java接口

我正在尝试使用Scala为Sonar构建扩展。 我需要扩展以下Java接口: public interface Decorator extends BatchExtension, CheckProject { void decorate(Resource resource, DecoratorContext context); } 但资源类型实际上定义如下: public abstract class Resource 我知道我可以解决创建Java原始超类的问题。 我想坚持Scala-only,也知道我是否缺少一个解决方案,以及是否有一个改进我可以向SonarSource人员建议他们(使用原始类型)。 我已经阅读过这方面存在的问题,以及某些情况下的一些解决方法,但似乎没有适用于此处( 一种解决方法 , 一张明显固定的机票 ,还有2091的机票…)

Javagenerics – 实现像map这样的高阶函数

我决定在Java中编写一些常见的高阶函数(map,filter,reduce等),这些函数通过generics是类型安全的,而且我遇到了在一个特定函数中匹配通配符的问题。 为了完整,函子接口是这样的: /** * The interface containing the method used to map a sequence into another. * @param The type of the elements in the source sequence. * @param The type of the elements in the destination sequence. */ public interface Transformation { /** * The method that will be used in map. * @param […]

关于Java中具体化generics的任何一个词?

我知道这个问题可能会引发更多的讨论,而不是具体的答案(我知道这不是更好)。 但是最近甲骨文的收购,我想知道是否有任何消息表明Java可能(有一天)会得到具体的仿制药? 我听说甲骨文希望给Java带来一些提升,我认为没有更好的方法。

由于某些中间构造函数,没有包含MySuperClass 类型的封闭实例

我试图使用超类型的内部类,它使用generics。 上面有那个奇怪的错误。 class MySuperClass { class InnerClass { } MySuperClass(InnerClass… c) { } } 在子类中,我试图实例化它: class MySubClass extends MySuperClass { MySubClass() { super(new InnerClass(), new InnerClass()); } } 编译器让我困惑 No enclosing instance of type MySuperClass is available due to some intermediate constructor 为什么?

为什么以下使用Cyclic Generics的代码无法编译?

以下是我的代码 class A<B2 extends B, A2 extends A> { C c; void test() { c.acceptParameterOfTypeA(this); } } class B { } class C<B2 extends B, A2 extends A> { void acceptParameterOfTypeA(A2 a) { } } 错误发生在c.acceptParameterOfTypeA(this); 。 错误是 类型C中的方法acceptParameterOfTypeA(A2)不适用于参数(A) 从我看来,方法acceptParameterOfTypeA需要一个类型为A的参数,而在给出错误的行中,这个类型为A. 我究竟做错了什么? 如何解决这个问题? 如果它很重要,我正在使用Java8

使用lambda表达式时,Java 8generics+exception编译时错误

几天前,我开始重构一些代码以使用新的Java 8 Streams库。 不幸的是,我在使用一个方法执行Stream :: map时遇到了编译时错误,该方法被声明为抛出一个进一步指定为RuntimeException的genericsE. 有趣的是,当我切换到使用方法引用时,编译时错误消失了。 这是一个错误,还是我的方法引用不等同于我的lambda表达式? (另外,我知道我可以用Parameter :: execute替换p-> p.execute(foo)。我的实际代码有execute方法的附加参数)。 错误信息 Error:(32, 43) java: unreported exception E; must be caught or declared to be thrown 码 import java.util.ArrayList; import java.util.List; public class JavaBugTest { interface AbleToThrowException { } interface Parameter { public Object execute(AbleToThrowException algo) throws E; } interface ThrowsRuntimeException extends AbleToThrowException { […]

如何编写添加数字的通用方法

我想定义一个方法来在不同的类型号之间进行求和: void add (T one, T two) { T res = one + two; } 上面的方法不起作用,因为类型擦除将T转换为Object ,因此+运算符没有在Object定义… 怎么办? 谢谢。