Implementation of java.sql.* abstract methods

Hi to u all,
Can someone tell me where the abstract methods in some interfaces in the java.sql package are implemented?
For example:
-- START CODE --
ResultSet rs = null;
try
ps = db().prepareStatement("select * from aTable where x=?");
ps.setInt(1, aValue);
rs = ps.executeQuery();
ResultSetMetaData md = rs.getMetaData();
-- END CODE --
It's about the getMetaData()-call.
It returns information about the column names in the resultset.
If I open the declaration (eclipse) the abstract method getResultSet() in the interface ResultSet in the java.sql-package is shown.
So where is the actual implementation of the method??
As a collegue told me he suspected the implementation is probably somewhere in the driver-software. If this is the case, how does the JVM know to find it there?
Thx in advance for your time and answer(s)

The JDBC driver implements the JDBC API.
The JVM how to know that?
1. The Class.forName("jdbc driver name") will load the driver into memory.
2. The DriverManager.registerDriver(Driver driver) will register the driver for later use.
Check the DriverManager.java for more detail.

Similar Messages

  • Java.sql.Blob method setBinaryStream?

    Hi,
    I've been trying to use the java.sql.Blob methods instead of the "Oracle Extensions" so that people w/o Oracle (using MySQL etc.) can still use my code.
    Problem: trying to get the OutputStream to write to the Blob. As of JDK1.4, java.sql.Blob has a method to do this, setBinaryStream. Unfortunately, calling this in Oracle JDBC (tried it in both thin and OCI version) throws an SQLException (Unsupported feature).
    Sample code:
    //Assume we already have a connection to the database, over either OCI or thin.
    //Assume a Statement stmt created from the connection.
    //Assume a table BlobTable with 2 fields : id (number) and data (blob).
    public void uploadBlob(byte [] theBytes){
         try{
         stmt.executeUpdate("INSERT INTO BlobTable (id, data) VALUES (1,empty_blob())");
         ResultSet rs = stmt.executeQuery("SELECT data FROM BlobTable WHERE id=1 FOR UPDATE");
         if (rs.next()){
    java.sql.Blob blob=rs.getBlob(1);
         OutputStream out=blob.setBinaryStream(0);
         //Next line never printed - error thrown.
         System.out.println("Got Stream");
         catch(Exception e){e.printStackTrace();}
    //End code
    Am I doing something wrong? Or is there simply no way to write to a Blob without using the extensions?
    None of the docs (examples, guides, etc) make any mention of this, although the JDBC dev guide does mention that the similar method in PreparedStmt only works over OCI.
    Thanks,
    Dan

    Hi lancea,
    It's been a while since this thread was active, but I have a related question.
    Is there a comprehensive list of changes between JDBC 3 and JDBC 4 that makes application not work any more, such as this setBinaryStream issue or the CallableStatement/Named parameters issue that we stumbled upon. We would like to address these issues proactively and not find out about them in production, since we're upgrading from jdk1.4 to jdk6. Oracle has provided us with their changes regarding database versions, but have been less forthcoming with JDBC spec version changes.
    Thanks in advance,
    Thomas Auzinger

  • Problems implementing java.sql.ResultSet on AbstractTableModel

    Hi java Gurus !!
    I have a trouble implementing interface java.sql.ResultSet on javax.swing.table.AbstractTableModel. The AbstractTableModel class defines a method like
    this:
    int findColumn(String column)
    while the java.sql.Resultset defines a method as follows:
    int findColumn(String column) throws SQLException.
    the compiler gives me the following error:
    "Error #: 462 : method findColumn(java.lang.String) in class inducontrol.Untitled1 cannot override method findColumn(java.lang.String) in class javax.swing.table.AbstractTableModel, overridden method does not throw java.sql.SQLException at line 213, column 14
    How can I solve it?
    thanks a lot !!!!

    Hassen is correct, it seems that you mix two different things.
    Can you show code excerpts so we can give you some tips ?

  • Java.beans.Statement & java.sql.Statement

    My old code from jdk1.3.1 throws the ambiguous class thingie-mo-bob. Why did they implement the new java.beans.Statement, and is there anyway to make it default to the old java.sql.Statement without having to go through all the old code and add import java.sql.Statement. I have like 200 jsp files 'n it will take a loooong time!
    Pete

    There r two ways to do this.
    (i) One is Implement the java.sql.Statement
    like
    package java.beans;
    public interface Statement implements
    java.sql.Statement {
    }What? Are you suggesting he edit the source code for java.beans.Statement and make it implement java.sql.Statement?? I would most certainly not suggest that solution- beside violating the licensing agreement, it has troubling consequences since you are basically redefining the structure of a class in a way that makes no functional sense- that is, there is no reason for java.beans.Statement to implement methods like getConnection() and the other signatures of java.sql.Statement.
    I'm not sure if I'm reading your response correctly or not, but I would definitely not refactor java.beans.Statement just to get this problem solved with out editing files ... ... since java.sql.Statement is used so widely, perhaps they should have considered a different name for java.beans.Statement , although you hate to base a name off of what's going to cause the least problems, rather then what makes the most sense ... ... any way, I guess it doesn't matter now: the name has been selected .... I'd be interested to hear how you solved the problem.

  • Somebody knows  "java.sql.DatabaseMetaData"  ??

    Hello !!
    I'm implementing the java.sql.DatabaseMetaData interface and I need to know if somebody already used it ...
    Here's my question: there's a method called "getIndexInfo(parameters)" ...
        DriverManager.registerDriver( new com.progress.sql.jdbc.JdbcProgressDriver() );
        Connection       con     = DriverManager.getConnection (parameters);
        DatabaseMetaData dbmd    = con.getMetaData();
        ResultSet        rsIndex = dbmd.getIndexInfo( null, db_schema, table_name, false, false );This method gets a description of a table's indices and statistics ( J2SE v1.3.1 ) ... One of the statistics that I can get is the TYPE (index type). I want to know what's the difference between them :
    tableIndexStatistic <<
    tableIndexClustered <<
    tableIndexHashed <<
    tableIndexOther <<
    Somebody can help me ??

    I want to know what's the difference
    between them :
    tableIndexStatistic <<
    tableIndexClustered <<
    tableIndexHashed <<
    tableIndexOther <<
    Somebody can help me ??What do you mean "the difference"? They are different ways of indexing a table. A general book on Oracle should cover the first three, a book on SQL Server might as well (and will definitely cover some.)

  • Can I use ' ', ' ', '= ' and ' =' with java.sql.Timestamp objects in EJB-QL

    ie. Is this valid?
    <query>
    <description>Find data between dates</description>
    <query-method>
    <method-name>findMetricsByDate</method-name>
    <method-params>
    <method-param>java.sql.Timestamp</method-param>
    </method-params>
    <method-params>
    <method-param>java.sql.Timestamp</method-param>
    </method-params>
    </query-method>
    <result-type-mapping>Local</result-type-mapping>
    <ejb-ql>
    SELECT OBJECT (o) FROM MetricResults AS o WHERE MetricResults.date > ?1 AND MetricResults.date < ?2
    </ejb-ql>
    </query>

    No. Not with current EJB 2.0 CMP specs at least. Later revisions are supposed to fix this, but for now, this seriously limits the usefulness of EJB-QL.
    .P.

  • How to get java.sql.Timestamp data from database

    Hello, i'm new to EJB and i can't get java.sql.Timestamp data, but when i'm trying to get java.lang.String data it works fine.
    * @ejb.finder
    * query="SELECT OBJECT(c) FROM userSCHEMA AS c
    *      WHERE c.lastName LIKE ?1
    * AND c.firstName LIKE ?2
    * AND c.registeredDate < ?3"
    * signature="java.util.Collection findPatient * (java.lang.String lastName,
    * java.lang.String firstName,
    * java.sql.Timestamp)"
    <method-params>
    <method-param>java.lang.String</method-param>
    <method-param>java.lang.String</method-param>
    <method-param>java.sql.Timestamp</method-param>
    </method-params>
    Where i made a mistake ?

    The main problem that I'm faced with, is that the
    java.sql.Timestamp now has only one constructor, it
    takes "long", i.e., milliseconds.That's because a Timestamp is just an offset from a particular instant of time. It doesn't have a timezone.
    Please note that I'm not trying to "print", i.e., I'm
    not interested in using the SimpleDateFormat.Then what are you interested in? You appear to be trying to create a Timestamp with a particular timezone, which doesn't make sense as I already noted. Is there a reason for this?

  • Abstract method which when implemented will have different parameters

    Hello to all,
    I have an assignment but not looking for someone to do it for me. I am only searching for a suggestion on how to do the following.
    Imagine having an application that needs to provide an estimate of the rent for different buildings.
    Basically I start with by having a class name Building. This class has an abstract method called estimateRent.
    I then create two classes that extend the class Building which are named Apartment and House. Both need to have the method estimateRent.
    However the problem is that the rent for the Apartment is calculated on the nights passed in the flat and the people in it, while the rent for the House is just calculated on a month bases.
    This means the estimateRent method requires to have different parameters depending if it is implemented inside the Apartment class or the House class.
    Now I only know of two options.
    The first option is to not declare the estimateRent method as an abstract method inside the Building class and just implemented inside the Apartment and House with different parameters. I do not like this option since in the future if a new Building comes in then I would like to impose the fact that that object needs to have a calculate method.
    The second option is to make the estimateRent method as abstract inside the Building class however takes a parameter of either a String array or else a Map. Then the estimateRent within the Apartment class would search for the elements tagged as nights and people, and the House class would only search for the elements tagged as months!
    However do not know if there are any other, better ways on how to do this. I am using Java 1.4 however if you only have answers for Java 5.0 then please post them again since I always like to learn something new :)
    Thank You for any comments.
    tx

    The implementation changes, yes.Yes that I could understand in the Strategy Pattern (in the document I read it was being compared with the Template Pattern).
    Then you need to refactor your design.I tought about that, however if you read my first post you will notice that I have different criteria on which the costs need to be estimated. While the costs for a flat are estimated on the people staying in and nights slept there, the costs for the house are based only on the months stayed there regardless of the people living in. Now for me I feel that it is bad programming practice to create one method that can have all the parameters required for any scenario. I mean the following is NOT something I am going to do:
    estimateCosts(int nights, int people, int months ... etc);
    That's not a very elegant way of going about it.
    What is the "Context" going to have?Yep I agree, but so far my limited brain has only come up with that! I am open to any other sugestion! always if i understand it first!
    Basically the Context would better be named as Criteria and it would be an interface as follows:
    interface Criteria{}
    Then I would create two classes that implement the Criteria object as follows:
    class AppartmentCriteria implements Criteria{
    public Result estimateCosts(int nights, int people);
    class HouseCriteria implements Criteria{
    public Result estimateCosts(int months);
    Now when I recieve the inputs, depending on the scenario the Criteria is typecasted and the correct parameters passed and we recieve the Result.
    I feel the above sucks since I am not seeing it as an object oriented way of doing this out! Is there any other sugestions! The refactoring thing I am intrested in! however really I can not see how such a call to that method could be refectored!
    Thank You,
    tx.
    PS: Sun has blocked my other account as well, and this time they did not even send me an email to confirm that I was registered successfuully :( Is there someone I can contact on this? I guess next time I will reply with tx53m :)

  • Why am i able to use abstract methods id they aren't yet implemented?

    For example, why i can use this [http://docs.oracle.com/javase/7/docs/api/java/nio/CharBuffer.html#slice] if this is abstract?
    Edited by: 947971 on 13-set-2012 10.38

    947971 wrote:
    Yes, but if CharBuffer has a method declared:
    public abstract CharBuffer slice()So i can't use the method slice() because it's not implemented.
    And why , indeed, i'm able to use it?Because it is implemented by the actual class being used. You can't instantiate abstract classes, so there is a subclass of CharBuffer which does implement the method.
    If you take the interface Comparable, you see that it has an (implicitly)abstract method compareTo. A class that implements Comparable is Integer, so you can easily write:
    Comparable<Integer> i = new Integer(100);
    i.compareTo(new Integer(55));

  • Java.sql.SQLException: Invalid column type: getInt not implemented ....

    I am working on SQLJ for EJB-CMP on websphere 5.1. I can successfully run insert methods. But when i run find method to get the objects. I got the runtime exception as follows:
    The stacktrace is:
    java.sql.SQLException: Invalid column type: getInt not implemented for class oracle.jdbc.driver.T4CRowidAccessor
         at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
         at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:161)
         at oracle.jdbc.driver.Accessor.unimpl(Accessor.java:387)
         at oracle.jdbc.driver.Accessor.getInt(Accessor.java:497)
         at oracle.jdbc.driver.OracleResultSetImpl.getInt(OracleResultSetImpl.java:489)
         at oracle.jdbc.driver.UpdatableResultSet.getInt(UpdatableResultSet.java:437)
         at com.ibm.ws.rsadapter.cci.WSRdbResultSetImpl.getInt(WSRdbResultSetImpl.java:1831)
         at com.ibm.ws.ejbpersistence.dataaccess.RawBeanData.getInt(Unknown Source)
         at com.hsbc.fxg.esd.persister.websphere_deploy.ORACLE_V9_1.FXDealPersisterBeanExtractor_6847a04c.extractPrimaryKey(FXDealPersisterBeanExtractor_6847a04c.java:52)
         at com.ibm.ws.ejbpersistence.dataaccess.ResultCollectionImpl.processSingleRow(Unknown Source)
         at com.ibm.ws.ejbpersistence.dataaccess.ResultCollectionImpl.processRow(Unknown Source)
         at com.ibm.ws.ejbpersistence.dataaccess.AbstractResultCollection.get(Unknown Source)
         at com.ibm.ws.ejbpersistence.dataaccess.ResultCollectionIteratorImpl.next(Unknown Source)
         at com.ibm.ejs.container.finder.FinderResultServerImpl.nextPrimaryKey(FinderResultServerImpl.java:883)
         at com.ibm.ejs.container.finder.FinderResultServerImpl.getWrapperBase(FinderResultServerImpl.java:525)
         at com.ibm.ejs.container.finder.FinderResultServerImpl.getAllWrapperCollection(FinderResultServerImpl.java:772)
         at com.ibm.ejs.container.finder.FinderResultFactory.finderResultCollection_Common(FinderResultFactory.java:192)
         at com.ibm.ejs.container.finder.FinderResultFactory.getCMP20FinderResultCollection(FinderResultFactory.java:80)
         at com.ibm.ejs.container.EJSHome.getCMP20Collection(EJSHome.java:2851)
         at com.hsbc.fxg.esd.persister.EJSCMPFXDealPersisterHomeBean_6847a04c.findByStatus(EJSCMPFXDealPersisterHomeBean_6847a04c.java:196)
         at com.hsbc.fxg.esd.persister.EJSRemoteCMPFXDealPersisterHome_6847a04c.findByStatus(EJSRemoteCMPFXDealPersisterHome_6847a04c.java:177)
         at java.lang.reflect.Method.invoke(Native Method)
         at com.ibm.CORBA.iiop.ClientDelegate$3.run(ClientDelegate.java:1140)
         at java.security.AccessController.doPrivileged(Native Method)
         at com.ibm.CORBA.iiop.ClientDelegate.invoke(ClientDelegate.java:1138)
         at $Proxy0.findByStatus(Unknown Source)
         at com.hsbc.fxg.esd.persister._FXDealPersisterHome_Stub.findByStatus(_FXDealPersisterHome_Stub.java:438)
         at java.lang.reflect.Method.invoke(Native Method)
         at com.ibm.etools.utc.model.ReflectionMethodModel.invoke(ReflectionMethodModel.java:68)
         at com.ibm.etools.utc.servlet.InvokeServlet.invoke(InvokeServlet.java:110)
         at com.ibm.etools.utc.servlet.InvokeServlet.doPost(InvokeServlet.java:352)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
         at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
         at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
         at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
         at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
         at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
         at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
         at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
         at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:948)
         at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:530)
         at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:176)
         at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:79)
         at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:201)
         at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
         at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:182)
         at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
         at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
         at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:610)
         at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:435)
         at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:593)
    I am using oracle version 10g. And Jpub 10.2 as the translator. How can i solve this problems? thx

    Looking at your trace, I assume you're trying to access ROWID or something like that, which is NOT Integer. If it is just ROWID, you should probably get it as string, if it just some NUMBER, you may try to access it as Long or BigDecimal instead. Or, if nothing helps, try to get this field valus as string also.

  • Implementing abstract methods

    Hello guys,
    I have a LPQueue class that implements a interface PQueue
    Here are the fiels:
    //PQueue interface
    import java.util.Iterator;
    interface PQueue<E extends Comparable<E>>
      public void insert(E x);
      public E peekMax();
      public E deleteMax();
      public int size();
      public void clear();
      public Iterator<E> iterator();
    //LPQueue class
    import java.util.*;
    import java.util.Iterator;
    public class LPQueue<E extends Comparable<E>> implements PQueue<E>
         private Node<E> first;
         private int size;
         public LPQueue(){
              first = null; //pointing to the first element
              size = 0;
         public void insert(E x){
              Node <E> tmp = new Node<E>(x);
              size++; //when we call insert we want to increase size by one to keep the size of queue current
              Node <E> p = first; //p points to first element
              Node <E> q = null; //this points to null initially because q has to stay behind p
              while(p != null && x.compareTo(p.data) > 0){
                   q = p;
                   p = p.next;
              if(q == null){
                   tmp.next = first;
                   first = tmp;
              else{
                   tmp.next = p;
                   q.next = tmp;
         public E peekMax(E x){
              if(size == 0){
                   throw new NoSuchElementException();
              if(x.compareTo(first.data) > 0){
                   return x;
              }else return first.data;
         public E deleteMax(E x){
              Node <E> tmp;
              if(size == 0){
                   throw new NoSuchElementException();
              if(x.compareTo(first.data) > 0){
                   first.data = null;
                   return x;
              }else
                   tmp = first;
                   first.data = null;
              return tmp.data;
         public int size(){
              return size;
         public void clear(){
              size = 0;
              first = null;
         public Iterator<E> iterator()
             return new LQIterator();
         private class LQIterator implements Iterator<E>{
              public Node<E> current;
              private LQIterator()
                  current = first;
                public boolean hasNext()
                    return current !=null;
                public E next()
                    if(!hasNext()){
                        throw new NoSuchElementException();
                    E x = current.data;
                    current = current.next;
                    return x;
                public void remove()
                    throw new UnsupportedOperationException();
         //seting up static Node class
         private static class Node <E>{
              public E data; //seting up paramtere data for node
              public Node<E> next; //
              public Node(E x){ //sting up constructor for Node passing the paramter x to data
                   data = x;
    }When i try to compile i get :
    The type LPQueue<E> must implement the inherited abstract method PQueue<E>.deleteMax() LPQueue.java
    The type LPQueue<E> must implement the inherited abstract method PQueue<E>.peekMax() LPQueue.java
    I have written the definition for both the peekMax and deletMax methods why am i still getting the above error?
    Thank you for your help,
    -Lovac

    The method signatures of the interface must match up exactly with the implementing classes. In the interface, neither method signature accepted a parameter, but in your concrete class, they do, and this just won't work.

  • Why java does not force to declare atleast one abstract method

    hi,
    i can define an abstract class without declaring any abstract method in that class. But why wud i do this ? i mean when i have decided that a particular class should be inherited by other subclass and subclass should porvide implementation then there should be atleast one method in the abstract super class which requires implementation.
    All i want to know is why java does not force to declare atleast one abstract method in abstract class.
    there may be some situations where this restriction can create problem if it is like that then can anybody give some example.
    manish

    hi,
    i didn't get u.
    u r trying to say that i have an abstract class with
    only static methods then my questions is why wud
    declare such a class as 'abstract' class? because a
    static method can't be abstract also. Even then if
    somebody want to define such a class with only static
    methods then compiler should force him to declare
    atleast one abstract method which can be implemented
    by subclass, because as i said before if sumbody
    decide to define a class abstract then he wants that
    it should be inhereted but as u r saying a class with
    only static methods then it should not be an abstract
    class it can be a simple class.there's no functional reason, really... actually, factory-like classes are often defined the way Ceci described
    "abstract" only ensures that nobody can ever get an instance of that class (as a matter of fact, what would be the point of getting an instance, if no instance method exists ?)

  • The type must implement the inherited abstract method???

    import java.awt.*;
    import java.awt.event.*;
    import java.awt.ActiveEvent;
    import java.applet.*;
    public class MoveIt extends Applet implements ActionListener
         private Image cup;
         private Panel keyPad;
         public int yaxis = 15;
         public int xaxis = 15;
         private Button keysArray[];
         public void init()
              cup = getImage(getDocumentBase(), "cup.gif");
              Canvas myCanvas = new Canvas();
              setBackground(Color.blue);
              setLayout(new BorderLayout());
              Button up = new Button("Up");
              Button down = new Button("Down");
              Button right = new Button("Right");
              Button left = new Button("Left");
              Button center = new Button("Center");
              add(myCanvas, BorderLayout.NORTH);
              add(keyPad, BorderLayout.SOUTH);
              keyPad.add(up, BorderLayout.NORTH);
              up.addActionListener(this);
              keyPad.add(down, BorderLayout.SOUTH);
              down.addActionListener(this);
              keyPad.add(right, BorderLayout.EAST);
              right.addActionListener(this);
              keyPad.add(left, BorderLayout.WEST);
              left.addActionListener(this);
              keyPad.add(center, BorderLayout.CENTER);
              center.addActionListener(this);
         public void paint( Graphics g )
              g.drawImage( cup, xaxis, yaxis, this );
         public void ActionPerformed(ActionEvent e)
              String action = e.getActionCommand();
              if(action.equals("Up"))
                   yaxis = yaxis - 15;
              if(action.equals("Down"))
                   yaxis = yaxis + 15;
              if(action.equals("Left"))
                   xaxis = xaxis - 15;
              if(action.equals("Right"))
                   xaxis = xaxis + 15;
              if(action.equals("Center"))
                   xaxis = 125;
                   yaxis = 60;
    }How come there is an error:
    The type MoveIt must implement the inherited abstract method
    ActionListener.actionPerformed(ActionEvent)
    What the hell does that mean?

    A class that implements an interface must define the methods of the interface. Your applet (or the one you borrowed) states at the top that it implements the ActionListener interface. If you go to the API, you'll see that this interface declares a method "actionPerformed", and so this class must have a method that matches the one in the interface. I see that your applet will have some Buttons. You'll need an actionPerformed method if you want the buttons to use your class (this) as their action listener.
    Edit: I see that you already have an "ActionPerformed" method, but note that case matters, and this is not the same as "actionPerformed". Change one letter and you're on your way.
    Edited by: Encephalopathic on Jan 15, 2008 8:44 PM

  • Should @Override apply to implementation of interface/abstract methods?

    To me this is a minor but irritating incompatibility between Java 5 and 6. In 5 the @Override annotation only applied when an actual concrete method was overridden. In 6 it also applies when an interface or abstract method is implemented.
    To my mind only the first case is actually overriding. Further the purpose of the @Override, AFAIKS, is to catch errors where you accidentally override a method, or write a method which you expect to override another, but get the signature wrong.
    This kind of error isn't going to happen on implementing a method because you will get a real syntax error.
    If we were going to use annotations to guarantee implementation it should be @Implements

    sabre150 wrote:
    masijade. wrote:
    Having spend some time recently changing from extending abstract classes to implementing interfaces I would hate to have two different annotations!It would be annoying, yes, in that case, but it would still be more "technically" correct to have a different tag. And, if we are going to insist that "newbies" here at least attempt to adhere to standards/procedures/whatever, we should be willing to do the same. ;-)It would be more "technically" correct to have an 'override' key word in the same way as in C# . The annotation approach is used to make up for a deficiency in the language specification. If one applies the KISS principle or the 'principle of least surprise' then just having one annotation makes sense.Okay then, we agree to disagree. But getting even farther away in the "use" of the term as opposed to the "definition" of the term isn't helping to make up for the deficiency in the language.
    Of course, in the practical sense it is better to have one as it is, then, least likely to "break" in a backwards compatability sense (even when it only applies to compilation and not execution).

  • Abstract Method in a Class with implemented method

    I have a class which already has methods Implemented.I mean thse metgods are not abstract.I want only one method to be abstarct which will be overrideen by its subclass or derived Class
    I have never tried this
    Does anyone knows how to do this
    If yes could you give me syntax of the method
    Thanks in advance
    CSJakharia

    javax.swing.JComponent is an example of an abstract
    class with no abstract methods. That is why the
    following works:
    JComponent component = new JComponent(){};
    Not to forget you cannot instantiate abstarct classes
    public abstract class Test
    public String getName()
    return "Mike";
    public static void main(String[] args)
    Test tt = new Test();
    System.out.println(tt.getName());
    }and you would get the error
    The type Test cannot be instantiated.
    You remove the abstract keyword and it would compile
    good.No I am not misinterpreting I know what he is saying but I am closing the door of misinterpretation which I felt was possible. ;)
    cheers

Maybe you are looking for

  • Mini DisplayPort to DVI Adapter not being recognized...

    I wanted to run two monitors off my Mac Pro - a Dell S2409W and an LG Flatron L1920P. Forget for a moment the ugliness of this set up, if you will. My problem is whichever monitor I connect to the mini displayport to DVI adapter isn't recognized. Whe

  • Printing barcodes on 10g server running on Solaris OS

    Hi, We are using Reports 10g (10.1.2) on Solaris Operating System (SPARC 32-bit). We wanted to print barcodes using Java bean method. It prints fine in windows, but giving below error when run on web using rwservlet. Actually we are using virtual dis

  • Getting Error Message When Trying To Burn To DVD HELP!!!!!

    This is the error message I am getting as soon as I click on the "burn" button. The following warnings and errors were found during the validation of the current project: - There seems to be too much motion menu content in your project. Correct this

  • E-mail server doesn't recognize username and password

    Il server e-mail non ha riconosciuto la combinazione nome utente/password.

  • Where to put my music

    Hi there, I keep a personal music library of about 20gb in one folder on the 'Documents' folder of my MacBook Pro. What concerns me is that when i take any of these music files into iTunes to listen to, iTunes automatically makes another copy for the