虽然我的问题是关于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) 我从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类的外部.如果这些类在不同的包中,我可以通过使用包名来限定其中一个来解决歧义.但在这种情况下,类不仅在同一个包中,而且在同一个文件中.如何获取外部类的实例?
我在这里看到了同样的问题,但是接受的答案意味着修改代码,为整个事物添加一个封闭的类.我的问题是如何使用任何类型的限定符或引用来获取实例,如果它甚至可能的话.
我的问题似乎和这个问题一样,但我没有找到答案,因为最初的问题似乎要求更具体的问题.在C++ 98中,有什么区别
char c;
cin.get(c);
Run Code Online (Sandbox Code Playgroud)
和
char c;
cin >> c;
Run Code Online (Sandbox Code Playgroud)
?
我已经检查了get和operator >>的cplusplus参考,它们看起来和我一样.
我已经尝试了上面的代码,当我输入一个char时,它们的行为似乎相同.