小编dag*_*erx的帖子

通过命令行在Windows机器上静默安装JDK 8和JRE 8

我们想在多台机器上更新JDK环境,所有运行的窗口都有不同的版本(XP或7)

为此,我现在正在创建一个脚本,它将自动运行正确的安装程序(32/64位).我尝试使用以下命令运行安装程序:

jdk-8u25-windows-x64.exe /s ADDLOCAL="ToolsFeature,SourceFeature,PublicjreFeature"

这在没有安装JDK/JRE 8的机器上工作正常.但是,我遇到了一些问题:

  • 如果已经安装了JDK/JRE 8,安装程序将取消JDK和JRE,而不是简单地做任何事情(或重新安装)
  • 如果需要重新启动,则会自动强制执行,我需要避免这种情况,因为安装完成后我需要在脚本中执行其他操作.
  • 没有VERBOSE模式/日志文件来指示安装程序实际执行的操作

我看过这些来源:

但他们似乎缺乏并且非常混淆什么会给我想要的结果.

java windows silent-installer

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

使用泛型返回带有类型参数的对象并避免使用类型安全警告

我正在编写一个为我的环境提供一些常用工具的类.

在这个类中,我有以下接收JSON字符串的方法,并且应该将JSON映射到适当的对象:

public static <T> T mapJsonToObject(String json, Class<T> clazz) {
    ObjectMapper mapper = new ObjectMapper();
    T parsedObject = null;
    try {
        parsedObject = mapper.readValue(json, clazz);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return parsedObject;
}
Run Code Online (Sandbox Code Playgroud)

从String到适当的类的实际转换是使用Jackson库完成的,并且正常工作,以及整个方法.

调用此方法,例如:

Object o = MyUtilities.mapJsonToObject(jsonString, Object.class);
Point p = MyUtilities.mapJsonToObject(jsonString, Point.class);
PhoneBook pb = MyUtilities.mapJsonToObject(jsonString, PhoneBook.class);
Run Code Online (Sandbox Code Playgroud)

一切正常.

但是,如果我不想将JSON映射到特定的对象,我只想使用键/值对将其转换为映射,如下所示:

HashMap<String, Object> myMap = MyUtilities.mapJsonToObject(result, HashMap.class);
Run Code Online (Sandbox Code Playgroud)

"Type safety: The expression of type HashMap needs unchecked conversion to conform to HashMap<String,Object>"从编译器收到警告.这是因为我在使用HashMap.class时丢失了泛型参数

在写这个问题时,我实际上偶然发现了 …

java generics

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

Hibernate和Criteria API返回Object数组而不是Tuple

我正在尝试使用Criteria API,并且遇到了Tuples的怪异问题。

我正在建立一个与此处描述的查询非常相似的查询:https : //docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html_single/#querycriteria-tuple

但是由于某种原因,结果列表实际上List<Object[]>不是List<Tuple>,因此我的代码在运行时失败。我可以轻松地解决该问题并在列表上更改迭代,以便它在运行时起作用,但是我想了解我在这里做错了什么。

这是我的查询代码:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Tuple> cq = cb.createTupleQuery();

Root<Users> usersRoot = cq.from(Users.class);
Path<String> namePath = usersRoot.get(Users_.fullName);
Path<Integer> employeeIdPath = usersRoot.get(Users_.employeeId);
cq.multiselect(namePath, employeeIdPath);

List<Tuple> resultList = entityManager.createQuery(cq).getResultList();

List<String> names = new ArrayList<>();
for (Tuple tuple : resultList) {
    names.add(tuple.get(namePath));
}
Run Code Online (Sandbox Code Playgroud)

这段代码可以正确编译,但是ClassCastException到达for循环时我得到了:java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to javax.persistence.Tuple

调试确认返回的结果列表确实包含Object[],而不包含Tuple,从而破坏了API合同。

我的休眠Maven依赖项:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.2.21.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-jpamodelgen</artifactId>
    <version>5.0.4.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

此代码作为EJB …

java hibernate jpa

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

标签 统计

java ×3

generics ×1

hibernate ×1

jpa ×1

silent-installer ×1

windows ×1