kettle job中的JavaScript如何获取同一个job中SQL步骤的执行语句并让执行语句记录在日志中呢?首先写日志需要用到job中JavaScript写日志的方法,其次是利用java反射机制获取执行的sql. 如: var sqlObj = getJobStep("SQL"); var sql = sqlObj.environmentSubstitute(sqlObj.getSQL()); var logWriter = org.pentaho.di.core.logging…
最近在使用Google的Gson包进行Json和Java对象之间的转化,对于包含泛型的类的序列化和反序列化Gson也提供了很好的支持,感觉有点意思,就花时间研究了一下. 由于Java泛型的实现机制,使用了泛型的代码在运行期间相关的泛型参数的类型会被擦除,我们无法在运行期间获知泛型参数的具体类型(所有的泛型类型在运行时都是Object类型). 但是有的时候,我们确实需要获知泛型参数的类型,比如将使用了泛型的Java代码序列化或者反序列化的时候,这个时候问题就变得比较棘手. class Foo<T>…
我经常会想获取参数的实际类型,在Hibernate中就利用的这一点. domain: Person.java public class Person { // 编号 private Long id; // 姓名 private String name; public Person() { } public Person(Long id, String name) { this.id = id; this.name = name; } public Long getId() { return id…
假设有两个类:Dao 和 PersonDao,它们的代码如下: Dao: public class Dao<T> { private Class<T> clazz; T getId(Integer id){ return null; } void save(T entity){ } } PersonDao: public class PersonDao extends Dao<Person> { } Person: public class Person { priva…
在平时写代码时,可以自定义泛型类.当使用同一类型的对象时,这是非常有用的,但在实例化类之前,我们不知道它将是哪种类型. 下面让我们定义一个使用泛型参数的方法.首先,在定义一个类用到泛型时,必须使用特殊语法来支持这种类型.在下面的例子中,<T>表示定义的类将要使用的类型: public class MyGeneric<T> { 当然,也可以定义泛型中包含多个类的类型,比如java.util.Map: public class MyGeneric<T, U, V> { }…
ParameterizedType getClass().getGenericSuperclass() 返回表示此 Class 所表示的实体(类.接口.基本类型或 void)的直接超类的 Type,然后将其转换ParameterizedType. getActualTypeArguments() 返回表示此类型实际类型参数的 Type 对象的数组.[0]就是这个数组中第一个了.简而言之就是获得超类的泛型参数的实际类型. Base Service public abstract class Bas…