小编Tho*_*ung的帖子

检查hibernate映射类中的不变量

使用hibernate的一个挑战是manged类必须有一个默认的构造函数.问题是没有明确的点来初始化类并且可以检查不变量.

如果一个类具有依赖于多个属性的不变量,则类设计变得复杂.让我们从假设的绿地设计开始:

public class A { 
    private int x; 
    private int y; 

    public A(int x, int y) { 
        this.x = x; 
        this.y = y; 
        checkInvariants(this.x, this.y); 
    } 

    private void checkInvariants(int x, int y) { 
        if (x + y « 0) throw new IllegalArgumentException(); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

这是不符合hibernate要求的基本实现.在构造函数中检查不变量.(checkInvariants()方法的内容并不重要,它仅用于说明类不变量可以依赖于多一个属性.)

该类可以使用如下:

new A(0, 0); 
new A(-1, 0); //invalid 
Run Code Online (Sandbox Code Playgroud)

要满足hibernate要求,一种解决方法是添加私有默认构造函数使用字段访问.(我省略了hibernate映射.)

public class H { 
    int x; 
    int y; 

    public H(int x, int y) { 
        this.x = x; 
        this.y = …
Run Code Online (Sandbox Code Playgroud)

java orm hibernate

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

在Scala中模拟可变参数模板

假设您希望在Scala中拥有类似可变参数模板(为泛型类定义n类型参数的能力).

例如你不想定义Tuple2[+T1, +T2]Tuple3[+T1, +T2, +T3]但是Tuple[T*].

除了支持元组,产品和功能的HLists之外还有其他选择吗?

generics types scala data-structures

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

在Java 6注释处理器中查找方法返回类型的类型参数

我正在编写一个工具,它使用注释处理器根据注释类的方法的返回类型生成源代码.返回类型始终A是定义类型变量的接口的某个子类型(接口或类)T.

interface A<T>{T m();};
Run Code Online (Sandbox Code Playgroud)

我想找到方法m()返回值类型变量的类型参数T.

返回类型由注释处理器表示为javax.lang.model.type.TypeMirror实例.最简单的情况是A<T>直接返回.

@SomeAnnotation
class SomeClass{
    A<T> x();
}
Run Code Online (Sandbox Code Playgroud)

要找到的处理器代码T非常简单.(我会在这里投射而不是使用访问者API来保持代码简单.)

DeclaredType type = (DeclaredType) typeMirror;
TypeMirror t = type.getTypeArguments().get(0);
Run Code Online (Sandbox Code Playgroud)

TypeMirror返回类型的是javax.lang.model.type.DeclaredTypeT是第一个类型参数.其结果t是一javax.lang.model.type.TypeVariableT.同样适用于具体的返回类型A<B>(B某种类型:) interface B{}.结果tDeclaredType代表B.

其他结果类型开始变得复杂:

interface Subtype<T> extends A<T>{}
interface Concrete extends A<B>{};
interface Multiple<B,T> extends A<T>{}
interface Bounds<T extends B> extends …
Run Code Online (Sandbox Code Playgroud)

java generics annotations annotation-processing

9
推荐指数
2
解决办法
6426
查看次数

对价值的存在量化

我在Scala语言规范(3.2.10存在类型)中遇到了关于值的存在量化.

x: y.Inner forSome{val y : Outer}
Run Code Online (Sandbox Code Playgroud)

有人有说明性的用例吗?

T forSome {val x: S}被定义为T forSome { type t <: S with Singleton }.Singletron特性在规范(3.2.1单例类型)中提到,但我在Scaladoc中找不到它.它在哪里定义?

types scala

9
推荐指数
1
解决办法
892
查看次数

如何在bash中逐行将命令输出转换为数组?

我正在尝试将命令的输出转换为echo -e "a b\nc\nd e"数组.

X=( $(echo -e "a b\nc\nd e") )
Run Code Online (Sandbox Code Playgroud)

拆分每个新行和空白字符的输入:

$ echo ${#X[@]}
> 5

for i in ${X[@]} ; do echo $i ; done
a
b
c
d
e
Run Code Online (Sandbox Code Playgroud)

结果应该是:

for i in ${X[@]} ; do echo $i ; done
a b
c
d e
Run Code Online (Sandbox Code Playgroud)

arrays bash shell

8
推荐指数
1
解决办法
1万
查看次数

在Java中从Object转换而不获取未经检查的警告

我写了一个有地图的类<String, Object>.我需要它来保存任意对象,但有时我需要投射一些这些对象,所以我会做类似的事情

HashMap<String, Object> map = new HashMap<String, Object>();                                                                                 
Object foo = map.get("bar");                                                                                                                                                                                                         
if (foo instanceof HashMap) {                                                                                                                                                                                                        
    ((HashMap<String, Integer>) foo).put("a", 5);                                                                                                                                                                                    
}            
Run Code Online (Sandbox Code Playgroud)

这给出了警告

Stuff.java:10: warning: [unchecked] unchecked cast
found   : java.lang.Object
required: java.util.HashMap<java.lang.String,java.lang.Integer>
        ((HashMap<String, Integer>) foo).put("a", 5);
Run Code Online (Sandbox Code Playgroud)

我怀疑它与泛型的使用有关.我可以使用@SupressWarnings("unchecked")摆脱错误,但我想知道是否有更好的方法来做到这一点.或许我得到警告的事实意味着我应该重新考虑我正在做的事情.有什么我可以做的,或者我应该只使用@SupressWarnings?

java generics casting

7
推荐指数
1
解决办法
3万
查看次数

Hibernate和Flyweight

有没有办法使用具有休眠持久性映射的Flyweight对象?我的数据模型包含许多相同的对象.我不想为每个相同的对象设置单独的实例,而是使用Flyweight设计模式并始终引用相同的物理对象.如何在hibernate中实现这一点?

顺便说一句.所有JVM都以某种方式优化字符串的使用,这样当多次使用相同的字符串时,它总是相同的物理实例?

java identity design-patterns hibernate flyweight-pattern

7
推荐指数
1
解决办法
1363
查看次数

Scala:实现Numeric的子类型[T]

如何实现Numeric [T]的子类型?我一直在寻找这方面的指南,但没有找到任何.子类型的例子可能是Rational还是Complex?

在此先感谢Troels

scala generic-programming scala-2.8

7
推荐指数
1
解决办法
1403
查看次数

如何从Collection中返回N个连续元素?

我传递了一个对象集合(在我的情况下是一些Contact类),需要从该集合返回一个页面.我的代码感觉比它需要的时间长得多.我是否缺少一些可以执行更优雅的库,而不是像下面一样一次迭代每个元素?

protected Collection<Contact> getPageOfContacts(
  Collection<Contact> contacts, int pageIndex, int pageSize) {
  if (pageIndex < 0 || pageSize <= 0
    || pageSize > contacts.size()) {
    return contacts;
  }
  int firstElement = pageIndex * pageSize;
  int lastElement = (pageIndex + 1) * pageSize - 1;
  Collection<Contact> pagedContacts = new ArrayList<Contact>();
  int index = -1;
  for (Contact contact : contacts) {
    index++;
    if (index < firstElement) {
      continue;
    }
    if (index > lastElement) {
      break;
    }
    pagedContacts.add(contact);
  }
  return pagedContacts;
}
Run Code Online (Sandbox Code Playgroud)

java iteration collections paging guava

7
推荐指数
2
解决办法
3906
查看次数

Java的HttpServletResponse没有isClientConnected方法

我正在使用java servlet实现一个长轮询http连接.

我怎么知道http客户端在任何情况下都仍然有效?目前,我所做的是将一个字节写入输出流并刷新数据.如果存在IO异常,则客户端已经死亡.

但是在ASP.NET中有一个属性,Response.IsClientConnected可以查看客户端是否处于活动状态而不向输出流写入任何内容.

我想知道如何在java servlet中开发.我不想继续将数据写入http响应流,因为它可能会花费网络成本.

提前致谢.

java servlets

7
推荐指数
1
解决办法
1448
查看次数