You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cu...@apache.org on 2007/05/02 23:06:58 UTC

svn commit: r534616 - in /lucene/hadoop/trunk: CHANGES.txt src/java/org/apache/hadoop/conf/Configuration.java src/java/org/apache/hadoop/mapred/JobConf.java

Author: cutting
Date: Wed May  2 14:06:57 2007
New Revision: 534616

URL: http://svn.apache.org/viewvc?view=rev&rev=534616
Log:
HADOOP-1308.  Use generics to restrict types when classes are passed as parameters to JobConf methods.  Contributed by Micahel Bieniosek.

Modified:
    lucene/hadoop/trunk/CHANGES.txt
    lucene/hadoop/trunk/src/java/org/apache/hadoop/conf/Configuration.java
    lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobConf.java

Modified: lucene/hadoop/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/CHANGES.txt?view=diff&rev=534616&r1=534615&r2=534616
==============================================================================
--- lucene/hadoop/trunk/CHANGES.txt (original)
+++ lucene/hadoop/trunk/CHANGES.txt Wed May  2 14:06:57 2007
@@ -309,6 +309,9 @@
 91. HADOOP-1304.  Make configurable the maximum number of task
     attempts before a job fails.  (Devaraj Das via cutting)
 
+92. HADOOP-1308.  Use generics to restrict types when classes are
+    passed as parameters to JobConf methods. (Michael Bieniosek via cutting)
+
 
 Release 0.12.3 - 2007-04-06
 

Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/conf/Configuration.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/conf/Configuration.java?view=diff&rev=534616&r1=534615&r2=534616
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/conf/Configuration.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/conf/Configuration.java Wed May  2 14:06:57 2007
@@ -337,14 +337,16 @@
    * An error is thrown if the returned class does not implement the named
    * interface. 
    */
-  public Class<?> getClass(String propertyName, Class<?> defaultValue,
-                           Class<?> xface) {
-    
+  public <U> Class<? extends U> getClass(String propertyName, Class<? extends U> defaultValue,
+      Class<U> xface) {
     try {
       Class<?> theClass = getClass(propertyName, defaultValue);
       if (theClass != null && !xface.isAssignableFrom(theClass))
         throw new RuntimeException(theClass+" not "+xface.getName());
-      return theClass;
+      else if (theClass != null)
+        return theClass.asSubclass(xface);
+      else
+        return null;
     } catch (Exception e) {
       throw new RuntimeException(e);
     }

Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobConf.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobConf.java?view=diff&rev=534616&r1=534615&r2=534616
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobConf.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobConf.java Wed May  2 14:06:57 2007
@@ -270,7 +270,7 @@
                                                              InputFormat.class),
                                                     this);
   }
-  public void setInputFormat(Class theClass) {
+  public void setInputFormat(Class<? extends InputFormat> theClass) {
     setClass("mapred.input.format.class", theClass, InputFormat.class);
   }
   public OutputFormat getOutputFormat() {
@@ -279,7 +279,7 @@
                                                               OutputFormat.class),
                                                      this);
   }
-  public void setOutputFormat(Class theClass) {
+  public void setOutputFormat(Class<? extends OutputFormat> theClass) {
     setClass("mapred.output.format.class", theClass, OutputFormat.class);
   }
 
@@ -343,7 +343,7 @@
    * @param codecClass the CompressionCodec class that will compress the 
    *                   map outputs
    */
-  public void setMapOutputCompressorClass(Class codecClass) {
+  public void setMapOutputCompressorClass(Class<? extends CompressionCodec> codecClass) {
     setCompressMapOutput(true);
     setClass("mapred.output.compression.codec", codecClass, 
              CompressionCodec.class);
@@ -356,13 +356,13 @@
    *   map outputs
    * @throws IllegalArgumentException if the class was specified, but not found
    */
-  public Class getMapOutputCompressorClass(Class defaultValue) {
+  public Class<? extends CompressionCodec> getMapOutputCompressorClass(Class<? extends CompressionCodec> defaultValue) {
     String name = get("mapred.output.compression.codec");
     if (name == null) {
       return defaultValue;
     } else {
       try {
-        return getClassByName(name);
+        return getClassByName(name).asSubclass(CompressionCodec.class);
       } catch (ClassNotFoundException e) {
         throw new IllegalArgumentException("Compression codec " + name + 
                                            " was not found.", e);
@@ -377,8 +377,8 @@
    * 
    * @return map output key class
    */
-  public Class getMapOutputKeyClass() {
-    Class retv = getClass("mapred.mapoutput.key.class", null,
+  public Class<? extends WritableComparable> getMapOutputKeyClass() {
+    Class<? extends WritableComparable> retv = getClass("mapred.mapoutput.key.class", null,
 			  WritableComparable.class);
     if (retv == null) {
       retv = getOutputKeyClass();
@@ -391,7 +391,7 @@
    * specify the map output key class to be different than the final output
    * value class
    */
-  public void setMapOutputKeyClass(Class theClass) {
+  public void setMapOutputKeyClass(Class<? extends WritableComparable> theClass) {
     setClass("mapred.mapoutput.key.class", theClass,
              WritableComparable.class);
   }
@@ -403,8 +403,8 @@
    * 
    * @return map output value class
    */
-  public Class getMapOutputValueClass() {
-    Class retv = getClass("mapred.mapoutput.value.class", null,
+  public Class<? extends Writable> getMapOutputValueClass() {
+    Class<? extends Writable> retv = getClass("mapred.mapoutput.value.class", null,
 			  Writable.class);
     if (retv == null) {
       retv = getOutputValueClass();
@@ -417,16 +417,16 @@
    * specify the map output value class to be different than the final output
    * value class
    */
-  public void setMapOutputValueClass(Class theClass) {
+  public void setMapOutputValueClass(Class<? extends Writable> theClass) {
     setClass("mapred.mapoutput.value.class", theClass, Writable.class);
   }
   
-  public Class getOutputKeyClass() {
+  public Class<? extends WritableComparable> getOutputKeyClass() {
     return getClass("mapred.output.key.class",
                     LongWritable.class, WritableComparable.class);
   }
   
-  public void setOutputKeyClass(Class theClass) {
+  public void setOutputKeyClass(Class<? extends WritableComparable> theClass) {
     setClass("mapred.output.key.class", theClass, WritableComparable.class);
   }
 
@@ -438,54 +438,54 @@
     return WritableComparator.get(getMapOutputKeyClass());
   }
 
-  public void setOutputKeyComparatorClass(Class theClass) {
+  public void setOutputKeyComparatorClass(Class<? extends WritableComparator> theClass) {
     setClass("mapred.output.key.comparator.class",
              theClass, WritableComparator.class);
   }
 
-  public Class getOutputValueClass() {
+  public Class<? extends Writable> getOutputValueClass() {
     return getClass("mapred.output.value.class", Text.class, Writable.class);
   }
-  public void setOutputValueClass(Class theClass) {
+  public void setOutputValueClass(Class<? extends Writable> theClass) {
     setClass("mapred.output.value.class", theClass, Writable.class);
   }
 
 
-  public Class getMapperClass() {
+  public Class<? extends Mapper> getMapperClass() {
     return getClass("mapred.mapper.class", IdentityMapper.class, Mapper.class);
   }
-  public void setMapperClass(Class theClass) {
+  public void setMapperClass(Class<? extends Mapper> theClass) {
     setClass("mapred.mapper.class", theClass, Mapper.class);
   }
 
-  public Class getMapRunnerClass() {
+  public Class<? extends MapRunnable> getMapRunnerClass() {
     return getClass("mapred.map.runner.class",
                     MapRunner.class, MapRunnable.class);
   }
-  public void setMapRunnerClass(Class theClass) {
+  public void setMapRunnerClass(Class<? extends MapRunnable> theClass) {
     setClass("mapred.map.runner.class", theClass, MapRunnable.class);
   }
 
-  public Class getPartitionerClass() {
+  public Class<? extends Partitioner> getPartitionerClass() {
     return getClass("mapred.partitioner.class",
                     HashPartitioner.class, Partitioner.class);
   }
-  public void setPartitionerClass(Class theClass) {
+  public void setPartitionerClass(Class<? extends Partitioner> theClass) {
     setClass("mapred.partitioner.class", theClass, Partitioner.class);
   }
 
-  public Class getReducerClass() {
+  public Class<? extends Reducer> getReducerClass() {
     return getClass("mapred.reducer.class",
                     IdentityReducer.class, Reducer.class);
   }
-  public void setReducerClass(Class theClass) {
+  public void setReducerClass(Class<? extends Reducer> theClass) {
     setClass("mapred.reducer.class", theClass, Reducer.class);
   }
 
-  public Class getCombinerClass() {
+  public Class<? extends Reducer> getCombinerClass() {
     return getClass("mapred.combiner.class", null, Reducer.class);
   }
-  public void setCombinerClass(Class theClass) {
+  public void setCombinerClass(Class<? extends Reducer> theClass) {
     setClass("mapred.combiner.class", theClass, Reducer.class);
   }