1

有没有办法在下面的示例中不指定所有类型参数?我试过只使用“记录”,但无济于事。

   Map<Integer,Result<Record6<Integer, String, Integer, String, String, Integer>>> records = db()
            .select(TRANSITIONS.TRANSITION_ID, TRANSITIONS.TYPE, POSES.POSE_ID, POSES.NAME, IMAGES.URL, IMAGES.SCORE.max())
            .from(TRANSITIONS
            .join(POSES).on(POSES.POSE_ID.equal(TRANSITIONS.TO_POSE_ID))
            .join(IMAGES).on(IMAGES.POSE_ID.equal(POSES.POSE_ID)))
            .where(TRANSITIONS.FROM_POSE_ID.equal(fromPoseId))
            .groupBy(TRANSITIONS.TRANSITION_ID, TRANSITIONS.TYPE, POSES.POSE_ID, POSES.NAME, IMAGES.URL)
            .fetchGroups(TRANSITIONS.TRANSITION_ID);
4

1 回答 1

0

Java 泛型的工作方式,你无法获得

Map<Integer, Result<?>> // or
Map<Integer, Result<Record>>

fetchGroups()方法中,给定它的签名:

<K> Map<K, Result<R>> fetchGroups(Field<K> key)

<R>但是,您可以通过调整您的类型来解决此问题,ResultQuery或者通过不安全的强制转换,或者通过使整个 select 的类型安全性降低,如下所示:

db().select(new Field[] { 
    TRANSITIONS.TRANSITION_ID, 
    TRANSITIONS.TYPE, 
    POSES.POSE_ID, 
    POSES.NAME, 
    IMAGES.URL, 
    IMAGES.SCORE.max() 
}).from(...)

或者使用这个技巧:

db().select(...) // "Typesafe" select clause
    .select()    // Additional select clause removing typesafety
于 2013-10-08T16:31:16.707 回答