diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ModelTransformOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ModelTransformOperator.java
index 6bd5c0e..ca5ffdf 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ModelTransformOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ModelTransformOperator.java
@@ -32,15 +32,17 @@
 public class ModelTransformOperator<X, Y> extends BinaryToUnaryOperator<Model<X, Y>, X, Tuple2<X, Y>> {
 
     public static ModelTransformOperator<double[], Integer> kMeans() {
-        return new ModelTransformOperator<>(new TypeReference<>() {}, new TypeReference<>() {});
+        // The type of TypeReference cannot be omitted, to avoid the following error.
+        // error: cannot infer type arguments for TypeReference<T>, reason: cannot use '<>' with anonymous inner classes
+        return new ModelTransformOperator<>(new TypeReference<double[]>() {}, new TypeReference<Tuple2<double[], Integer>>() {});
     }
 
     public static ModelTransformOperator<double[], Double> linearRegression() {
-        return new ModelTransformOperator<>(new TypeReference<>() {}, new TypeReference<>() {});
+        return new ModelTransformOperator<>(new TypeReference<double[]>() {}, new TypeReference<Tuple2<double[], Double>>() {});
     }
 
     public static ModelTransformOperator<double[], Integer> decisionTreeClassification() {
-        return new ModelTransformOperator<>(new TypeReference<>() {}, new TypeReference<>() {});
+        return new ModelTransformOperator<>(new TypeReference<double[]>() {}, new TypeReference<Tuple2<double[], Integer>>() {});
     }
 
     public ModelTransformOperator(DataSetType<X> inType, DataSetType<Tuple2<X, Y>> outType) {
diff --git a/wayang-platforms/wayang-spark/code/main/java/org/apache/wayang/spark/operators/ml/Attr.java b/wayang-platforms/wayang-spark/code/main/java/org/apache/wayang/spark/operators/ml/Attr.java
index 44eade0..e51f69c 100644
--- a/wayang-platforms/wayang-spark/code/main/java/org/apache/wayang/spark/operators/ml/Attr.java
+++ b/wayang-platforms/wayang-spark/code/main/java/org/apache/wayang/spark/operators/ml/Attr.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.apache.wayang.spark.operators.ml;
 
 public class Attr {
diff --git a/wayang-platforms/wayang-spark/code/test/java/org/apache/wayang/spark/operators/SparkDecisionTreeClassificationOperatorTest.java b/wayang-platforms/wayang-spark/code/test/java/org/apache/wayang/spark/operators/SparkDecisionTreeClassificationOperatorTest.java
index 9f81696..18c5747 100644
--- a/wayang-platforms/wayang-spark/code/test/java/org/apache/wayang/spark/operators/SparkDecisionTreeClassificationOperatorTest.java
+++ b/wayang-platforms/wayang-spark/code/test/java/org/apache/wayang/spark/operators/SparkDecisionTreeClassificationOperatorTest.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.apache.wayang.spark.operators;
 
 import org.apache.wayang.basic.data.Tuple2;
diff --git a/wayang-platforms/wayang-spark/code/test/java/org/apache/wayang/spark/operators/SparkLinearRegressionOperatorTest.java b/wayang-platforms/wayang-spark/code/test/java/org/apache/wayang/spark/operators/SparkLinearRegressionOperatorTest.java
index 4c4e11c..3c51d78 100644
--- a/wayang-platforms/wayang-spark/code/test/java/org/apache/wayang/spark/operators/SparkLinearRegressionOperatorTest.java
+++ b/wayang-platforms/wayang-spark/code/test/java/org/apache/wayang/spark/operators/SparkLinearRegressionOperatorTest.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.apache.wayang.spark.operators;
 
 import org.apache.wayang.basic.data.Tuple2;
