小编tor*_*omp的帖子

Java Generics限制接口

我不确定这是否可能,但我想要完成的是:

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 SomeClassA不必基于信任进行转换.客户端将不能访问到实现的实际类的名称SomeClassA,因为它会在编译时产生的,因此对于类型安全性这个问题.

java generics interface

10
推荐指数
1
解决办法
3773
查看次数

SQL使用没有SELECTING的列名别名

我知道我可以指定一个列别名,如下所示:

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)

sql select alias

6
推荐指数
1
解决办法
3072
查看次数

正常处理TypeMirror和Class

我刚刚进入这里的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)

java reflection annotation-processing

6
推荐指数
1
解决办法
4420
查看次数

Eclipse AutoValue类无法构建

我正在运行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.nullablep.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在类声明的开头强调了所描述的错误。

java eclipse velocity maven auto-value

4
推荐指数
1
解决办法
3485
查看次数

计算OR逻辑的hashCode

我有一个作为唯一标识符的对象,它有两个参数,我们将它们称为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"这个非常低效的解决方案?不知道在这里做什么样的数学运算

java logic equals hashcode

2
推荐指数
1
解决办法
74
查看次数

空间平均计算有限

假设我有N个整数,其中N可以变大,但每个int保证在0和某个上限M之间,其中M很容易适合有符号的32位字段.

如果我想计算这些N个整数的平均值,我不能总是在同一个有符号的32位空间中对它们进行求和并将它们全部除以 - 如果N太大,分子就有溢出的风险.这个问题的一个解决方案是仅使用64位字段进行计算,以保持较大的N,但此解决方案不会扩展 - 如果M是一个大的64位整数,则会出现同样的问题.

有谁知道一个算法(最好是O(N))可以计算同一位空间中正整数列表的平均值?没有像使用两个整数来模拟更大的一样便宜.

algorithm math big-o

2
推荐指数
1
解决办法
79
查看次数

Java 6套接字垃圾收集

快速提问:

如果Socket对象(及其本地缓存的InputStream和OutputStream对象)超出范围并被垃圾收集,那么JVM中的连接是否保持打开状态?(即,在侦听服务器上不会抛出EOFException)

java sockets garbage-collection

2
推荐指数
1
解决办法
597
查看次数