小编Die*_*nso的帖子

Java泛型:如何从方法中获取泛型类型?

虽然我的问题是关于Java泛型,但我已经提出了一些与JPA相关的代码来向您展示真实的上下文.

我正在使用JPA 2.0和基于Criteria API的查询.我的所有查询都遵循相同的模式(比较简单的属性;不需要路径导航),所以我试图编写一个泛型类来处理JPA,同时将业务逻辑保持在分离的类中.我的目标是有一个方法,给定一个实体类型和一个存储定义条件的对(字段名称 - >期望值)的Map,返回一个bean(或bean的集合),其中包含一些实体字段的值.

我的所有实体都实现了Persistible接口,而我的所有传输对象都继承自QueryBean.我认为这些类与问题无关,所以我正在跳过他们的代码.

以下代码是我的第一个方法的片段(请假设cb是有效的CriteriaBuilder实例):

protected <T extends QueryBean, TT extends Persistible> Collection<T> executeQueryEntity
        (Class<T> type, Class<TT> rootType, QueryConfig queryConfig, Map<String, Object> parameters) {
    // (...) Initialization goes here

    CriteriaQuery<T> c = cb.createQuery(type);

    // FROM CLAUSE
    Root<TT> root = c.from(rootType);

    // SELECT CLAUSE
    List<String> constructorParams = queryConfig.getTargetAttributes();
    Selection<?>[] selectArray = new Selection<?>[constructorParams.size()];
    for (int i = 0; i < constructorParams.size(); i++) {
        selectArray[i] = root.get(constructorParams.get(i));
    }
    c.select(cb.construct(type, selectArray));

    // WHERE CLAUSE
    for (String …
Run Code Online (Sandbox Code Playgroud)

java generics types class

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

Java内部类阴影外部类

我从K&B书"SCJP Sun认证程序员Java 6学习指南"中获取了以下代码:

class A { // 1
    void m() { 
        System.out.println("outer"); 
    } 
}

public class TestInners {

    public static void main(String[] args) {

        new TestInners().go();

    }

    void go() {

        new A().m();

        class A { // 2
            void m() { 
                System.out.println("inner"); 
            } 
        }

    }

    class A { // 3
        void m() { 
            System.out.println("middle"); 
        } 
    }
}
Run Code Online (Sandbox Code Playgroud)

如书中所述,此代码打印"中间".我推断标记为"3"的类声明是标记为"1"的类,它是TestInners类的外部.如果这些类在不同的包中,我可以通过使用包名来限定其中一个来解决歧义.但在这种情况下,类不仅在同一个包中,而且在同一个文件中.如何获取外部类的实例?

我在这里看到了同样的问题,但是接受的答案意味着修改代码,为整个事物添加一个封闭的类.我的问题是如何使用任何类型的限定符或引用来获取实例,如果它甚至可能的话.

java class shadowing

5
推荐指数
1
解决办法
612
查看次数

istream :: get(char&)和operator >>(char&)之间的区别

我的问题似乎和这个问题一样,但我没有找到答案,因为最初的问题似乎要求更具体的问题.在C++ 98中,有什么区别

char c;
cin.get(c);
Run Code Online (Sandbox Code Playgroud)

char c;
cin >> c;
Run Code Online (Sandbox Code Playgroud)

我已经检查了getoperator >>的cplusplus参考,它们看起来和我一样.

我已经尝试了上面的代码,当我输入一个char时,它们的行为似乎相同.

c++ istream

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

标签 统计

class ×2

java ×2

c++ ×1

generics ×1

istream ×1

shadowing ×1

types ×1