Extending a generic class

hi all,
i want to extends a generic class, HashTable<K,V> to be concrete , but i want my class would be in use as MyHashTable<String, String>
does any one know the syntax for that ??
what i actually mean is how do i set the generics data types in the inheritance mechanism ??
thanks
Jaimon

hi all,
i want to extends a generic class, HashTable<K,V> to
be concrete , but i want my class would be in use as
MyHashTable<String, String>
does any one know the syntax for that ??
what i actually mean is how do i set the generics
data types in the inheritance mechanism ??So, you want your MyHashTable to not be generic, but always be a Hashtable<String, String>? The syntax is the same as everywhere.
class MyHashtable extends Hashtable<String, String> {
}Or do you want your MyHashtable to be generic, as in:
class MyHashtable<K, V> extends Hashtable<K, V> {
}

Similar Messages

  • Help on compiling my generics class

    Hi,
    I'm still trying to grasp generics, and I'm having trouble getting the following code to compile. Can someone tell me what is wrong?
    public class Test<T extends Test>
      T t;
      public static void test(Test<? extends Test> test)
        System.out.println(test.t.t);
    }Thanks a lot
    -Cuppo

    It doesn't make sense to me that you would create a generic whose generic type must extend the generic class. Though this compiles with warnings, no errors. If you can't compile, be sure your using JDK 5.0 and you're not defining the -source option.
    Also I don't think you can have:
    public static void test(Test<? extends Test> test)I think you need:
    public static void test(Test<? super Test> test)This works:
    public class Test<T extends Test>
      T t;
      public static void test(Test<? super Test> test)
        System.out.println(test.t.t);
      public static void main(String[] args)
           MyTest t = new MyTest();
           test(t);
    class MyTest extends Test
         public MyTest()
              super();
              t = this;
    }

  • Using static .values() method of Enum in Generic Class

    Hi *,
    I tried to do the following:
    public class AClass<E extends Enum<E> >  {
         public AClass() {
              E[] values = E.values(); // this DOESN'T work
              for (E e : values) { /* do something */ }
    }This is not possible. But how can I access all Enum constants if I use
    an Enum type parameter in a Generic class?
    Thanks for your help ;-) Stephan

    Here's a possible workaround. The generic class isn't adding much in this case; I originally wrote it as a static method that you simply passed the class to:
    public class Test21
      public static enum TestEnum { A, B, C };
      public static class AClass<E extends Enum<E>>
        private Class<E> clazz;
        public AClass(Class<E> _clazz)
        {  clazz = _clazz;  }
        public Class<E> getClazz()
        {  return clazz;  }
        public void printConstants()
          for (E e : clazz.getEnumConstants())
            System.out.println(e.toString());
      public static void main(String[] argv)
        AClass<TestEnum> a = new AClass<TestEnum>(TestEnum.class);
        a.printConstants();
    }

  • Best way to call a function in a generic class from a base class

    Hi,
    I have a generic class that works with subclasses of some other baseclass. When I construct the subclass, I call the constructor of the baseclass which I want to call a function in the generic class. e.g. suppose I have the following classes
    public class List<T extends BaseClass>
        newTCreated(T t)
    }

    Sorry, I pressed Tab and Enter last time when typing the code so I posted without meaning to
    Hi,
    I have a generic class that works with subclasses of some other baseclass. When I construct the subclass, I call the constructor of the baseclass which I want to call a function in the generic class. e.g. suppose I have the following classes
    public class List<T extends BaseClass>
        public void newTCreated(T t)
            // add the t to some internal list
        public T getT(int index)
            // get the object from the internal list
    public class BaseClass
        public BaseClass(List<?> list)
            list.newTCreated(this);
    public class SubClass extends BaseClass
        public SubClass(List<SubCass> list)
            super(list);
    }This doesn't compile because of the call to newTCreated in the BaseClass constructor because BaseClass is not necessarily of type T. Is there any way of checking when I call the newTCreated function that the BaseClass is actually of type SubClass? I could either add the call explicitly in each SubClass's constructor or have a function addToList in BaseClass that is called from the BaseClass constructor but overloaded in each subclass but both of those rely on future subclasses doing the same. Or I could change the newTCreated function to take an argument of type BaseClass and then cast it to type T but this doesn't give a compilation error, only a runtime exception.
    It seems like there should be solution but having only recently started writing Generic classes I can't find it. Thanks in advance for any help,
    Tom

  • Getting the name of the generic class?

    I have a generic class declared as such:
    public class MyClass<T>
    and I want to access the name of the <T> class a member function in that class? I just can't figure out which syntax to use.
    Thank you!
    Joshua

    Sorry, I'm a little bit confused at your answer.
    I cannot seem to instantiate an object of class T, like: T item = new T();does not work. If I can't create an object of type T, then I can't get it's type. I need to get the class even if I don't have any instantiated objects (or if I can create a blank one), so that I can use the name to fetch the objects from the persistence engine. Here is the class, so you can see what I'm talking about. I have in there now what seems like it should be right, but doesn't compile.
    A small example of solution please?
    public class PersistentSelectorCellEditor<T> extends AbstractCellEditor
              implements TableCellEditor {
         JComboBox control;
         List<T> choices;
         Session session;
         public PersistentSelectorCellEditor() {
              initializeComponents();
         public PersistentSelectorCellEditor(Object value) {
              initializeComponents();
              this.control.setSelectedItem(value);
         private void initializePersistence() {
              session = LabApp.getSession();
              session.beginTransaction();
         private void initializeComponents() {
              initializePersistence();
              populateList();     //query for selections to fill combo box
              control = new JComboBox((ComboBoxModel)choices);
         private void populateList() {
              //query to populate drop down lists
              Query query = session.createQuery("from " + T.class.getName());
              choices = query.list();
         public void setValue(T value) {
              control.setSelectedItem(value);
         public T getValue() {
              return (T)control.getSelectedItem();
         //interface members
         public Object getCellEditorValue() {
              return control.getSelectedItem();
         public Component getTableCellEditorComponent(JTable table, Object value,
                   boolean isSelected, int row, int column) {
              return control;
    }Thank you!
    Joshua

  • Generic classes with parameterized super class and interface

    Hello.
    I'm trying to write a generic class that looks like the following pseudo-code.
    public interface Interface {
        public Interface getSibling(...);
    public class Klass {...}
    public class MyKlass<T extends Klass, T2 extends Interface>
            extends T implements T2 {
        public T2 getSibling(...) {
            return this;
    }where Interface and Klass each have various extensions.
    I came across this problem, or challenge, while writing classes for testing my EJBs. I tried and failed various attempts.
    Is it possible to write generic classes of this nature in Java?
    If so, please tell me and others who are like me.
    Thanks in advance.

    No. That would not work.
    Beside being forbidden by the compiler, to my understanding, it cannot be done in theory either, as the parameterized types get bound at instantiation time and are not available for static reference, which both extends and implements require.

  • How can I extend the Vector class?

    Hi All,
    I'm trying to extend the Vector class so I can get add a .remove(item:T) method to the class.  I've tried this:
    public class VectorCollection extends Vector.<T>
    That gives me the compile error "1017: The definition of base class Vector was not found"
    So then I tried:
    public class VectorCollection extends Vector
    Which gives me the compile error "1016: Base class is final."
    There must be some way to extend the Vector class, though, as on the Vector's official docs page it says:
    Note: To override this method in a subclass of Vector, use ...args for the parameters, as this example shows:
         public override function splice(...args) {
           // your statements here
    So there must be a way to extend the Vector class.  What am I doing wrong?

    No. AS3 doesn't currently have full support for generic types; Vector.<T> was added in an ad-hoc ("ad-hack"?) way. We are considering adding full support in a future version of ActionScript.
    Gordon Smith
    Adobe Flex SDK Team

  • (Class ? extends Set String ) Class.forName("example.SetImpl").asSubclass

    Is there a way to do the following without an Unchecked cast?
    Class<? extends Set<String>> clazz;
    clazz = (Class<? extends Set<String>>) Class.forName("example.SetImpl").asSubclass(Set.class);
    Set<String> mySet = clazz.newInstance();
    cheers,
    reto

    No. The last line will always generate that warning making the second line pointless. There is no way to create a new instance of a generic class because there is (for most intents and purposes) no such thing as a generic class at runtime.

  • Need help with generic class with comparable type

    Hi. I'm at University, and I have some coursework to do on writing a generic class which offers ordered binary trees of items which implement the comparable interface.
    I cant get the code to compile which I have written.
    I get the error: OBTComparable.java uses unchecked or unsafe operations
    this is the more detailed information of the error when I compile with -Xlint:unchecked
    OBTComparable.java:62: warning: [unchecked] unchecked call to insert(OBTType) as
    a member of the raw type OBTComparable
    left.insert(insertValue);
    ^
    OBTComparable.java:64: warning: [unchecked] unchecked call to insert(OBTType) as
    a member of the raw type OBTComparable
    right.insert(insertValue);
    ^
    OBTComparable.java:75: warning: [unchecked] unchecked call to find(OBTType) as a
    member of the raw type OBTComparable
    return left.find(findValue);
    ^
    OBTComparable.java:77: warning: [unchecked] unchecked call to find(OBTType) as a
    member of the raw type OBTComparable
    return right.find(findValue);
    ^
    and here is my code for the class
    public class OBTComparable<OBTType extends Comparable<OBTType>>
      // A tree is either empty or not
      private boolean empty;
      // If the tree is not empty then it has
      // a value, a left and a right.
      // These are not used it empty == true
      private OBTType value;
      private OBTComparable left;
      private OBTComparable right;
      // Create an empty tree.
      public OBTComparable()
        setEmpty();
      } // OBTComparable
      // Make this tree into an empty tree.
      private void setEmpty()
        empty = true;
        value = null; // arbitrary
        left = null;
        right = null;
      } // setEmpty
      // See if this is an empty (Sub)tree.
      public boolean isEmpty()
      { return empty; }
      // Get the value which is here.
      public OBTType getValue()
      { return value; }
      // Get the left sub-tree.
      public OBTComparable getLeft()
      { return left; }
      // Get the right sub-tree.
      public OBTComparable getRight()
      { return right; }
      // Store a value at this position in the tree.
      private void setValue(OBTType requiredValue)
        if (empty)
          empty = false;
          left = new OBTComparable<OBTType>(); // Makes a new empty tree.
          right = new OBTComparable<OBTType>(); // Makes a new empty tree.
        } // if
        value = requiredValue;
      } // setValue
      // Insert a value, allowing multiple instances.
      public void insert(OBTType insertValue)
        if (empty)
          setValue(insertValue);
        else if (insertValue.compareTo(value) < 0)
          left.insert(insertValue);
        else
          right.insert(insertValue);
      } // insert
      // Find a value
      public boolean find(OBTType findValue)
        if (empty)
          return false;
        else if (findValue.equals(value))
          return true;
        else if (findValue.compareTo(value) < 0)
          return left.find(findValue);
        else
          return right.find(findValue);
      } // find
    } // OBTComparableI am unsure how to check the types of OBTType I am comparing, I know this is the error. It is the insert method and the find method that are causing it not to compile, as they require comparing one value to another. How to I put the check in the program to see if these two are of the same type so they can be compared?
    If anyone can help me with my problem that would be great!
    Sorry for the long post, I just wanted to put in all the information I know to make it easier for people to answer.
    Thanks in advance
    David

    I have good news and undecided news.
    First the good news. Your code has compiled. Those are warnings not errors. A warning is the compiler's way of saying "I understand what you are asking but maybe you didn't fully think through the consequences and I just thought I would let you know that...[something] "
    In this case it's warning you that you aren't using generics. But like I said this isn't stopping it from compiling.
    The undecided news is the complier is warning you about not using generics. Are you supposed to use generics for this assignment. My gut says no and if that's true then you have no problem. If you are supposed to use generics well then you have some more work.

  • Multiple inherited with generics classes

    Hello all, here is my generic observer/ subject code.
    package jstock;
    * @author yccheok
    public interface Observer<S, A> {
        public void update(S subject, A arg);
    public class Subject<S, A> {
        public void attach(Observer<S, A> observer) {
            observers.add(observer);
        void notify(S subject, A arg) {
            for (Observer<S, A> obs : observers) {
                obs.update(subject, arg);
        private List<Observer<S, A>> observers = new CopyOnWriteArrayList<Observer<S, A>>();
    }However, when I try to implements more than one class (single class only is ok), I get the following error :
    /home/yccheok/Projects/jstock/src/org/yccheok/jstock/gui/MainFrame.java:40: org.yccheok.jstock.engine.Observer cannot be inherited with different arguments: <org.yccheok.jstock.engine.RealTimeStockMonitor,java.util.List<org.yccheok.jstock.engine.Stock>> and <org.yccheok.jstock.engine.StockHistoryMonitor,org.yccheok.jstock.engine.StockHistoryServer>
    public class MainFrame extends javax.swing.JFrame implements
    Here is the code which I am implementing the generic classes.
    public class MainFrame extends javax.swing.JFrame implements
    org.yccheok.jstock.engine.Observer<RealTimeStockMonitor, java.util.List<org.yccheok.jstock.engine.Stock>>,
    org.yccheok.jstock.engine.Observer<StockHistoryMonitor, StockHistoryServer>
    May I know how I can avoid the error message?
    Thank you.
    cheok

    However, when I try to implements more than one classMore than one interface, you mean.
    May I know how I can avoid the error message?You can't implement a generic interface more than once.
    http://angelikalanger.com/GenericsFAQ/FAQSections/ProgrammingIdioms.html#Can%20a%20class%20implement%20different%20instantiations%20of%20the%20same%20parameterized%20interface?

  • Making a generic class that uses interfaces.

    I've learned how to do this:
    class MyClass<T extends Object> {
    }But I want a generic class that takes objects that implement another object like this:
    class MyClass<T implements Runnable> {
    }Why doesn't this work? Is there any way to do this?

    happypigface wrote:
    Yes thank you. Thats strange that Java does that. I didn't really test it yet, but I know Runnable is an instance and eclipse doesn't have any compiling errors for it. I'm glad that you can do this. It wouldn't very useful if you could only specify that the generic class had to be a subclass, not an implementation of a class.Generics are about types rather than classes and interfaces. Hence, one specifies the supertype(s) of a Generic Parameter by using the extends keyword.
    Note, however, it's possible to extend multiple interface types but only one class type.

  • Generic Class

    Does anybody know how can I create generic class where I could pass a Method (as a task) to execute?
    My idea is to create a class extending Thread or Runable and pass the method I want to run and this same class should do something when the method (task) had finished.
    Thanks.

    Why do you want to do this? Why not use the Executors instead?
    http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/Executor.html
    Kaj

  • Generic class literal?

    I thought it would be useful if the class literal could return a generic class. For
    e.g. something like this
    Class<HashMap<Long,Long>> c = HashMap.class;
    Obviously the above will not work by typecasting or templating the RHS. A
    work around could be something like
    HashMap<Long,Long> h = new HashMap<Long,Long> ();
    Class<HashMap<Long,Long>> c = (HashMap<Long,Long>)h.getClass();
    Are there any other better work arounds?

    Hmmm, I was thinking of passing a generic Class to
    the method so that I could use reflection to
    instantiate the class (instead of new HashMap<K,
    V>()). That way, the method would work not just for
    HashMap but for anything implementing Map. For e.g. I
    also use EnumMap simillarly.Okay, now I see where you're going with this. I don't see any reason the following wouldn't work if the client uses it correctly. You would need to document clearly the class must either be generic or implement the parameterized types specified and it must have a no-argument constructor.
        <K, V> Map<K, V> putIfMissing(final String key,
                                      final Map<String, Map<K, V>> h,
                                      final Class<? extends Map> clazz)
                throws IllegalAccessException, InstantiationException {
            Map<K, V> value = h.get(key);
            if (value == null) {
                // Unchecked assignment.  Will be fine if the class passed is a
                // generic Map or if it implements Map<K, V> with the same types.
                value = clazz.newInstance();
                h.put(key, value);
            return value;
        }You'll have to be very careful to document everything that could go wrong with this. Even then I'm not sure there's not a gotcha in there somewhere. A perhaps more object-oriented and safer solution, though more verbose, would be for the client to pass the mechanism for creating the map.
        interface MapFactory<K, V> {
            Map<K, V> createMap();
        <K, V> Map<K, V> putIfMissing(final String key,
                                      final Map<String, Map<K, V>> h,
                                      final MapFactory<K, V> factory) {
            Map<K, V> value = h.get(key);
            if (value == null) {
                value = factory.createMap();
                h.put(key, value);
            return value;
        }

  • Hp LaserJet 1200 Generic Class: Waiting for device

    I have 2 computers that I want to print to my hp Laserjet 1200 printer. We are using an iogear 4-port usb 2.0 sharing switch. One computer prints fine but the other always displays a message "Generic Class: Waiting for device." Help!

    Both computers have the printer driver installed. The usb device does not have a driver to install. You just plug in the usb cords to each computer and the printer. You only install a driver if using a pc operating system.

  • Array of generic class

    Hi.
    i have to create an array of generic class
    ex: GenericClass<E> [ ] x = new GenericClass<E>[ y ]
    is it possible?
    i can create GenericClass<E> [ ] x; but i can't initiate it in this way..
    Someone know how i can do it?

    crosspost
    http://forum.java.sun.com/thread.jspa?threadID=746524&messageID=4272614#4272614

Maybe you are looking for

  • Buy an iMac with the seller's password

    Hi, End of 2011, I bought an iMac 27". I sold it the past year, september 2013, at my father's coworker. Anyway, I thought I removed everything from this iMac before she took it, but it seems like my apple account is still stuck in there. She wants m

  • Lenovo Launcher v3.2 Update (but in chinese language)

    Hi there, Just want to share what I've found There is an update of lenovo launcher that can be found in here http://launcher.lenovo.com/launcher/portal.php But there are problems It is not good for persons who don't understand Chinese like me The sit

  • Calling an  pipeline function in a Select query

    Hello gurus , i have a query calling pipeline function WITH t AS      (SELECT dep_code, emp_id         FROM test1        WHERE dep_code = 'C1' AND emp_id = '123') SELECT *   FROM TABLE           (CAST               ((pk_get_emp_dtls.fn_t_get_emp_dtls

  • Manually Manage Music Option Diasppeared

    I'm hoping someone can help me with a really frustrating change that seems to have happened to itunes since I started using iMatch: the option to manually manage music and videos has disappeared and been replaced by an option to manage video only. If

  • Answer machine messages BT freestyle 335

    Is there anyway that I can listen to an answering machine message as it is being left without picking the phone up. I have had the freestyle appx 18 months and have yet to work out how to do this. I have read the quick start guide along with the full