我不确定这是否可能,但我想要完成的是:
public static <A,B extends SomeClass & A> B makeB(A thing) {...}
Run Code Online (Sandbox Code Playgroud)
本质上,使用反射/生成驱动的进程,我想提供类型B的东西,其中B是类SomeClass并实现接口A,而A是用户通过泛型提供的.
我不是在询问生成B的机制 - 我已经掌控了这一点.我正在寻找的是一种将泛型类型参数限制<A>为接口而不是类的方法,以便我可以使用语法B extends SomeClass & A来实现清洁类型安全.
这可能吗?有人知道这个问题的替代方法吗?
编辑:我想我没有非常清楚地表达自己,因为它似乎在评论中引起了混淆:
B旨在成为通配符的占位符,以便客户端可以获得单个对象,该对象既是a SomeClass又A不必基于信任进行转换.客户端将不能访问到实现的实际类的名称SomeClass和A,因为它会在编译时产生的,因此对于类型安全性这个问题.
我知道我可以指定一个列别名,如下所示:
SELECT stuff as mask
Run Code Online (Sandbox Code Playgroud)
有没有办法可以指定列别名而不在结果集中返回该列数据?从本质上讲,我希望能够通过以下方式使我的查询干净:
SELECT doManipulationStuff(cleanCompactAlias)
Run Code Online (Sandbox Code Playgroud)
哪里
reallyLong.misleading.andAnnoying.columnName as cleanCompactAlias
Run Code Online (Sandbox Code Playgroud) 我刚刚进入这里的javax AnnotationProcessing,并遇到了一个丑陋的案例.我将在一系列描述我学习过程的伪代码行中进行说明:
MyAnnotation ann = elementIfound.getAnnotation(MyAnnotation.class);
// Class<?> clazz = ann.getCustomClass(); // Can throw MirroredTypeException!
// Classes within the compilation unit don't exist in this form at compile time!
// Search web and find this alternative...
// Inspect all AnnotationMirrors
for (AnnotationMirror mirror : element.getAnnotationMirrors()) {
if (mirror.getAnnotationType().toString().equals(annotationType.getName())) {
// Inspect all methods on the Annotation class
for (Entry<? extends ExecutableElement,? extends AnnotationValue> entry : mirror.getElementValues().entrySet()) {
if (entry.getKey().getSimpleName().toString().equals(paramName)) {
return (TypeMirror) entry.getValue();
}
}
return null;
}
}
return …Run Code Online (Sandbox Code Playgroud) 我正在运行Eclipse Kepler SR2,并附带了带有m2e和m2e-apt插件的Maven 3.1.1,但出现错误,我不知道如何解决。
我设法找到了@AutoValue进入pom.xml 所需的所有依赖关系,但是现在我处于一种状态,即只有在需要定义的方法都具有原始返回类型的情况下,该状态才有效。如果我提供了一个返回一个Object或更具体值的抽象getter,则会出现此错误:
@AutoValue processor threw an exception:
java.lang.IllegalArgumentException:
Failed to invoke com.google.auto.value.processor.AutoValueProcessor$Property.nullable() on getObject...
Run Code Online (Sandbox Code Playgroud)
我已经尝试了基础知识-清除了Maven缓存,重新启动了Eclipse,重建了项目...没有骰子。因此,我深入研究了源代码,发现了一个不一致之处,不确定该如何解决。
在用于生成的AutoValue类的Velocity模板中,存在一些基本逻辑,用于以不同于对象的方式渲染图元,例如,在第37行,p.nullable已被检查。的p变量是的一个实例AutoValueProcessor$Property的类,其中,因为可以在前述连杆的205行可以看到,有一个isNullable()方法,但是没有nullable方法或属性。
那么Velocity渲染阶段打算如何工作?Velocity是否会自动扩展p.nullable为p.isNullable某种方式,但由于原因而不适合我?这是错误吗?我不确定从这里做什么。
无法编译的示例类:
@AutoValue
public abstract class Point {
public static Point of(double x, double y) {
return new AutoValue_Point(x, y);
}
public abstract Double x();
public abstract Double y();
}
Run Code Online (Sandbox Code Playgroud)
Eclipse Point在类声明的开头强调了所描述的错误。
我有一个作为唯一标识符的对象,它有两个参数,我们将它们称为A和B,并具有以下逻辑:
当且仅当以下情况时,obj1等于obj2:
obj1.A is equal to obj2.A
Run Code Online (Sandbox Code Playgroud)
要么
obj1.B is equal to obj2.B
Run Code Online (Sandbox Code Playgroud)
如何为此对象计算合同上令人满意的hashCode()?我是不是坚持做"总是回归0"这个非常低效的解决方案?不知道在这里做什么样的数学运算
假设我有N个整数,其中N可以变大,但每个int保证在0和某个上限M之间,其中M很容易适合有符号的32位字段.
如果我想计算这些N个整数的平均值,我不能总是在同一个有符号的32位空间中对它们进行求和并将它们全部除以 - 如果N太大,分子就有溢出的风险.这个问题的一个解决方案是仅使用64位字段进行计算,以保持较大的N,但此解决方案不会扩展 - 如果M是一个大的64位整数,则会出现同样的问题.
有谁知道一个算法(最好是O(N))可以计算同一位空间中正整数列表的平均值?没有像使用两个整数来模拟更大的一样便宜.
快速提问:
如果Socket对象(及其本地缓存的InputStream和OutputStream对象)超出范围并被垃圾收集,那么JVM中的连接是否保持打开状态?(即,在侦听服务器上不会抛出EOFException)