ByteBuffer's static "wrap" method -- managing memory

Hello,
I have a function which will be called many, many times over:
     public static ByteBuffer byteArr2ByteBuff(byte[] data, int off, int len) {
          byte[] subData = new byte[len];
          try {
               System.arraycopy(data, off, subData, 0, len);
          } catch (Exception e) {
               e.printStackTrace();
          // TODO find out if null'ing out subData works? Curious if this helps efficiency? This function will get called a LOT...
          ByteBuffer out = ByteBuffer.wrap(subData);
          subData = null;
          return out;
My question this:
At the end of my code, I null out the "subData" array manually since I am not sure if the "wrap()" method will cause the subData to be held on, or get garbage collected.
Now, its not easy for me to test this out in my current system since I am actually using this on the Android platform (min API 8). Preferably, I would just "return ByteBuffer.wrap(subData);" and be done with it, but since this function will get calls 100's of thousands of times, I want to be doubly sure its efficent.

Thanks for the reply, let me give you some background information as to why the function will be called many times. I am creating an app on Android that works with Bluetooth and will accept streaming data. The data that is coming in is binary, so I need to cut the data into its chunks and feed it into a float, or short, or int, etc.
For example, after it comes out the "return ByteBuffer.wrap(..)" I take that output and do a .order(null).getFloat() on it, depending on the byte order.
As much as I wish I could have used JavaStruct (see GoogleCode) or the C/C++ style Structs to feed in data a-la #pragma(push), I don't see any other way to handle this kind of data. I am hoping that ByteBuffer is very memory efficient and fast.
Also, as for the "System.arraycopy()" usage, I could look into making that more efficient, however that would require all other methods calling byteArr2ByteBuff to modify how it sends data to this function.
Thanks for clearing the air on how Null doesn't have any effect though. If you have other ideas on how to handle the parsing of binary packets coming in through a socket, I am definitely all ears!
PS. I'd rather using Arrays.copyrange instead of the System.arraycopy method, but since I am making this app work for Android API8+, I am limited on the Arrays methods.
Edited by: 1000047 on Apr 17, 2013 11:42 PM
For example, here is an example of the usage (sorry not sure how to properly format in sans-serif on this forum yet!)
          public void unpack(byte[] data) {
               int i = -fSize; //fSize == 4
               accx = Streams.byteArr2ByteBuff(data, i += fSize, fSize).order(null).getFloat();
               accy = Streams.byteArr2ByteBuff(data, i += fSize, fSize).order(null).getFloat();
               accz = Streams.byteArr2ByteBuff(data, i += fSize, fSize).order(null).getFloat();
               gyrox = Streams.byteArr2ByteBuff(data, i += fSize, fSize).order(null).getFloat();
               gyroy = Streams.byteArr2ByteBuff(data, i += fSize, fSize).order(null).getFloat();
               gyroz = Streams.byteArr2ByteBuff(data, i += fSize, fSize).order(null).getFloat();
               temp = Streams.byteArr2ByteBuff(data, i += fSize, fSize).order(null).getFloat();
Edited by: 1000047 on Apr 17, 2013 11:45 PM

Similar Messages

  • System.InsufficientMemoryException: Failed to allocate a managed memory buffer of 268435456 bytes. The amount of available memory may be low. --- System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.

    Appfabric 1.1 server setup on 3 Windows server 2008 R2 machines.
    Client windows 7 64 bit.
    Because there is no bulkupdate ,we are trying to persist around 4000 objects wrapped in a CLR object.
     [Serializable]
        public class CacheableCollection<T> : ICacheable, IEnumerable<T>
            where T : class, ICacheable
            [DataMember]
            private Dictionary<string, T> _items;
            public IEnumerator<T> GetEnumerator()
                return _items.Values.GetEnumerator();
            IEnumerator IEnumerable.GetEnumerator()
                return _items.Values.GetEnumerator();
            [DataMember]
            public string CacheKey { get; private set; }
            public T this[string cacheKey] { get { return _items[cacheKey]; } }
            public CacheableCollection(string cacheKey, T[] items)
                if (string.IsNullOrWhiteSpace(cacheKey))
                    throw new ArgumentNullException("cacheKey", "Cache key not specified.");
                if (items == null || items.Length == 0)
                    throw new ArgumentNullException("items", "Collection items not specified.");
                this.CacheKey = cacheKey;
                _items = items.ToDictionary(p => p.CacheKey, p => p);
    We tried with the following options on server and client
    Server:
     <advancedProperties>
                <partitionStoreConnectionSettings leadHostManagement="false" />
                <securityProperties mode="None" protectionLevel="None">
                    <authorization>
                        <allow users="[email protected]" />
                        <allow users="[email protected]" />
                    </authorization>
                </securityProperties>
                <transportProperties maxBufferSize="500000000" />
            </advancedProperties>
    Client: 
     <transportProperties connectionBufferSize="131072" maxBufferPoolSize="500000000"
                           maxBufferSize="838860800" maxOutputDelay="2" channelInitializationTimeout="60000"
                           receiveTimeout="600000"/>
    I see different people experiencing different memory size issues. What is the actual memory limit of an  object that can be pushed to Appfabric. 
    Can some one please help ?
    Stack trace:
    Test method Anz.Cre.Pdc.Bootstrapper.Test.LoaderFuncCAOTest.AppFabPushAndRetrieveData threw exception: 
    System.InsufficientMemoryException: Failed to allocate a managed memory buffer of 268435456 bytes. The amount of available memory may be low. ---> System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
    System.Runtime.Fx.AllocateByteArray(Int32 size)
    System.Runtime.Fx.AllocateByteArray(Int32 size)
    System.Runtime.InternalBufferManager.PooledBufferManager.TakeBuffer(Int32 bufferSize)
    System.Runtime.BufferedOutputStream.ToArray(Int32& bufferSize)
    System.ServiceModel.Channels.BufferedMessageWriter.WriteMessage(Message message, BufferManager bufferManager, Int32 initialOffset, Int32 maxSizeQuota)
    System.ServiceModel.Channels.BinaryMessageEncoderFactory.BinaryMessageEncoder.WriteMessage(Message message, Int32 maxMessageSize, BufferManager bufferManager, Int32 messageOffset)
    System.ServiceModel.Channels.FramingDuplexSessionChannel.EncodeMessage(Message message)
    System.ServiceModel.Channels.FramingDuplexSessionChannel.OnSendCore(Message message, TimeSpan timeout)
    System.ServiceModel.Channels.TransportDuplexSessionChannel.OnSend(Message message, TimeSpan timeout)
    System.ServiceModel.Channels.OutputChannel.Send(Message message, TimeSpan timeout)
    Microsoft.ApplicationServer.Caching.WcfClientChannel.SendMessage(EndpointID endpoint, Message message, TimeSpan timeout, WaitCallback callback, Object state, Boolean async)
    Microsoft.ApplicationServer.Caching.WcfClientChannel.Send(EndpointID endpoint, Message message, TimeSpan timeout)
    Microsoft.ApplicationServer.Caching.WcfClientChannel.Send(EndpointID endpoint, Message message)
    Microsoft.ApplicationServer.Caching.DRM.SendRequest(EndpointID address, RequestBody request)
    Microsoft.ApplicationServer.Caching.RequestBody.Send()
    Microsoft.ApplicationServer.Caching.DRM.SendToDestination(RequestBody request, Boolean recordRequest)
    Microsoft.ApplicationServer.Caching.DRM.ProcessRequest(RequestBody request, Boolean recordRequest)
    Microsoft.ApplicationServer.Caching.DRM.ProcessRequest(RequestBody request, Object session)
    Microsoft.ApplicationServer.Caching.RoutingClient.SendMsgAndWait(RequestBody reqMsg)
    Microsoft.ApplicationServer.Caching.DataCache.SendReceive(RequestBody reqMsg)
    Microsoft.ApplicationServer.Caching.DataCache.ExecuteAPI(RequestBody reqMsg)
    Microsoft.ApplicationServer.Caching.DataCache.InternalPut(String key, Object value, DataCacheItemVersion oldVersion, TimeSpan timeout, DataCacheTag[] tags, String region)
    Microsoft.ApplicationServer.Caching.DataCache.Put(String key, Object value, String region)
    Anz.Cre.Pdc.DataCache.DataCacheAccess.Put[T](String cacheName, String regionName, T value) in C:\SVN\2.3_Drop3\app\Src\Anz.Cre.Pdc.DataCache\DataCacheAccess.cs: line 141
    Anz.Cre.Pdc.DataCache.DataCacheAccess.Put[T](String cacheName, String regionName, Boolean flushRegion, T value) in C:\SVN\2.3_Drop3\app\Src\Anz.Cre.Pdc.DataCache\DataCacheAccess.cs: line 372
    Anz.Cre.Pdc.Bootstrapper.Test.LoaderFuncCAOTest.AppFabPushAndRetrieveData() in C:\SVN\2.3_Drop3\app\Src\Anz.Cre.Pdc.Bootstrapper.Test\LoaderFuncCAOTest.cs: line 281

    Essentially what we are trying to do is the following.
    we have different kinds of objects in our baseline. Objects of type CAO, Exposures, Limits that change everyday after close of business day. 
    We wanted to push these different objects in to respective named regions in the cache. 
    Region Name     Objects
    CAO                   ienumerable<caos>
    Exposures           ienumerable<exposures>
    Limits                ienumerable<limits>
    we have a producer that pushes this data in to the cache and consumers of this data acting on the data when its available.
    Now the issue we are facing is when we try to push around 4000 cao objects (roughly in the size of 300MB when serialized using xml) ,we are getting the above error. Increasing the size on the client and cache cluster didnt help.
    The other alternative we were thinking about is chunking and pushing because appfabric doesnt support streaming. We might be able to push this data successfuly if we chunk. But how about the consumers ? wouldnt they face the same memory issue when we use
    getallobjectsinregion ?
    We thought if there was a way to figure out the keys in the region then probably the consumers can get one by one. However there is no such API. 
    The only option i see is using Appfabric notifications which msdn says isnt a reliable way.
    Please help.

  • MVC Separation: Static POJO Methods as Controller

    Hi All.
    I am designing my first Java EE app. It is a web-only/no-EJB app but I still want to clearly separate view code and controller code within my web container.
    I am thinking to do this by making a "ViewServlet" class and a "ControllerPOJO" class. The ViewServlet will just pass requests on to the ControllerPOJO and format the returned, processed data to send it back to the client. The ControllerPOJO will have no member data, just static methods like ControllerPOJO.processRequest( ) or something.
    My questions are:
    As I understand it the servlet connection/thread pool is managed by the web container, but POJO threading is not specially managed. In the design I described will the static ControllerPOJO method just execute in the thread of the ViewServlet instance that calls it, the same as if all the code was in the servlet class, or could the threading/connection throughput act differently somehow?
    Is this design orthodox? Maybe what I actually want is a ControllerServlet and a ViewPOJO? Or two servlets, ControllerServlet and ViewServlet?
    Thanks,
    Bishop

    will the static ControllerPOJO method just execute in the thread of the ViewServlet instance that calls it, the same as if all the code was in the servlet class, or could the threading/connection throughput act differently somehow?The general principles of Java Concurrency hold true for Java Servlet as well. Unless a new thread is created to execute the Callee method, both of them will execute in same thread.
    Is this design orthodox? Maybe what I actually want is a ControllerServlet and a ViewPOJO? Or two servlets, ControllerServlet and ViewServlet?Use a controller Servlet for request processing and selecting views. The controller Servlet receives the requests from the client and maps them to an appropriate business model. Based on the results of the operation and state of the model, the controller then selects the next view to display. Finally, the controller generates the selected view and transmits it to the client for presentation. Please check this link for details
    [http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/web-tier/web-tier5.html|http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/web-tier/web-tier5.html]

  • Static Classes/Methods vs Objects/Instance Classes/Methods?

    Hi,
    I am reading "Official ABAP Programming Guidelines" book. And I saw the rule:
    Rule 5.3: Do Not Use Static Classes
    Preferably use objects instead of static classes. If you don't want to have a multiple instantiation, you can use singletons.
    I needed to create a global class and some methods under that. And there is no any object-oriented design idea exists. Instead of creating a function group/modules, I have decided to create a global class (even is a abstract class) and some static methods.So I directly use these static methods by using zcl_class=>method().
    But the rule above says "Don't use static classes/methods, always use instance methods if even there is no object-oriented design".
    The book listed several reasons, one for example
    1-) Static classes are implicitly loaded first time they are used, and the corresponding static constructor -of available- is executed. They remain in the memory as long as the current internal session exists. Therefore, if you use static classes, you cannot actually control the time of initialization and have no option to release the memory.
    So if I use a static class/method in a subroutine, it will be loaded into memory and it will stay in the memory till I close the program.
    But if I use instance class/method, I can CREATE OBJECT lo_object TYPE REF TO zcl_class then use method lo_object->method(), then I can FREE  lo_object to delete from the memory. Is my understanding correct?
    Any idea? What do you prefer Static Class OR Object/Instance Class?
    Thanks in advance.
    Tuncay

    @Naimesh Patel
    So you recommend to use instance class/methods even though method logic is just self-executable. Right?
    <h3>Example:</h3>
    <h4>Instance option</h4>
    CLASS zcl_class DEFINITION.
      METHODS add_1 IMPORTING i_input type i EXPORTING e_output type i.
      METHODS subtract_1 IMPORTING i_input type i EXPORTING e_output type i.
    ENDCLASS
    CLASS zcl_class IMPLEMENTATION.
      METHOD add_1.
        e_output = i_input + 1.
      ENDMETHOD.
      METHOD subtract_1.
        e_output = i_input - 1.
      ENDMETHOD.
    ENDCLASS
    CREATE OBJECT lo_object.
    lo_object->add_1(
      exporting i_input = 1
      importing e_output = lv_output ).
    lo_object->subtract_1(
      exporting i_input = 2
      importing e_output = lv_output2 ).
    <h4>Static option</h4>
    CLASS zcl_class DEFINITION.
      CLASS-METHODS add_1 IMPORTING i_input type i EXPORTING e_output type i.
      CLASS-METHODS subtract_1 IMPORTING i_input type i EXPORTING e_output type i.
    ENDCLASS
    CLASS zcl_class IMPLEMENTATION.
      METHOD add_1.
        e_output = i_input + 1.
      ENDMETHOD.
      METHOD subtract_1.
        e_output = i_input - 1.
      ENDMETHOD.
    ENDCLASS
    CREATE OBJECT lo_object.
    lo_object->add_1(
    zcl_class=>add_1(
      exporting i_input = 1
      importing e_output = lv_output ).
    lo_object->subtract_1(
    zcl_class=>subtract_1(
      exporting i_input = 2
      importing e_output = lv_output2 ).
    So which option is best? Pros and Cons?

  • Static variable behaviour in memory

    Hi,
    My question is :
    When you compile a java code, does the static variable gets the memory allocated while creating the byte code or is it on run time that a static variable gets the memory allocation and then it is shared for all instances.
    Thanks
    Melvyn.

    Good !!! I expected this question from you.
    Instantiation and Initialization are different.
    A class or interface type T will be initialized immediately before the first occurrence of any one of the following:
    1) T is a class and an instance of T is created.
    2) T is a class and a static method declared by T is invoked.
    3) A static field declared by T is assigned.
    4) A static field declared by T is used and the reference to the
    field is not a compile-time constant. References to
    compile-time constants must be resolved at compile time to
    a copy of the compile-time constant value, so uses of such a
    field never cause initialization.
    Regards
    Raghu

  • Calling static synchronized method in the constructor

    Is it ok to do so ?
    (calling a static synchronized method from the constructor of the same class)
    Please advise vis-a-vis pros and cons.
    regards,
    s.giri

    I would take a different take here. Sure you can do it but there are some ramifications from a best practices perspective. f you think of a class as a proper object, then making a method static or not is simple. the static variables and methods belong to the class while the non-static variables and methods belong to the instance.
    a method should be bound to the class (made static) if the method operates on the class's static variables (modifies the class's state). an instance object should not directly modify the state of the class.
    a method should be bound to the instance (made non-static) if it operates on the instance's (non-static) variables.
    you should not modify the state of the class object (the static variables) within the instance (non-static) method - rather, relegate that to the class's methods.
    although it is permitted, i do not access the static methods through an instance object. i only access static methods through the class object for clarity.
    and since the instance variables are not part of the class object itself, the language cannot and does not allow access to non-static variables and methods through the class object's methods.

  • Does not contain a static 'Main' method suitable for an entry point_

    Hello
    I want to to do a project with Entiity Framework . I add a project to my solution for my domain class and it's name is 'LinkModel.DomainClasses'.  when I prees F5 there is an error like bellow.
    Could You help me to solve this? thanks alot
    ..\Documents\Training\LinkCodeFirstLast\LinkCodeFirst\LinkCodeFirst\LinkModel.DomainClasses\obj\Debug\LinkModel.DomainClasses.exe'
    does not contain a static 'Main' method suitable for an entry point

    Hi bkshn,
    This error is caused by the missing "Main" method in your project. it is the entry point of your project.
    If you want to create a EF project, you could follow the way in the aricle below.
    https://msdn.microsoft.com/en-us/data/ee712907#codefirst
    The Main method is like below.
    class Program
    static void Main(string[] args)
    using (var db = new BloggingContext())
    // Create and save a new Blog
    Console.Write("Enter a name for a new Blog: ");
    var name = Console.ReadLine();
    var blog = new Blog { Name = name };
    db.Blogs.Add(blog);
    db.SaveChanges();
    // Display all Blogs from the database
    var query = from b in db.Blogs
    orderby b.Name
    select b;
    Console.WriteLine("All blogs in the database:");
    foreach (var item in query)
    Console.WriteLine(item.Name);
    Console.WriteLine("Press any key to exit...");
    Console.ReadKey();
    And you could start to learn the EF from the following MSDN blogs.
    https://msdn.microsoft.com/en-us/data/ee712907
    If you have any other concern regarding this issue, please feel free to let me know.
    Best regards,
    Youjun Tang
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • Projectname.exe' does not contain a static 'Main' method suitable for an entry point .

    Hi,
    I'm developing a blog reader for windows 8 store app. It was perfectly worked before. But because of some miss behave my coding i get below error. No other errors there.
    Error    1    Program 'c:\Users\.........\Desktop\Blog_Reader\Blog_Reader\obj\Release\intermediatexaml\Blog_Reader.exe' does not contain a static 'Main' method suitable for an entry point    C:\Users\..........\Desktop\Blog_Reader\Blog_Reader\CSC  
     Blog_Reader
    Please help me to figure this.
    Thank You!

    Go to your App.Xaml and R-Click Go to Properties
    Check whether the Build Action is ApplicationDefinition
    If not change it to ApplicationDefinition. Clean the code (solution ) and Deploy..
    Chears....

  • Solution for Windows Store app "projectname.exe" does not contain a static 'Main' method suitable for an entry point . Error.

    Hi,
    I'm developed a blog reader for windows 8 store app. It was perfectly worked before. But suddenly it started to miss behave and I got an
    error. No other errors were there other than that.
    Error 
    Program c:\Users\.........\Desktop\Blog_Reader\Blog_Reader\obj\Release\intermediatexaml\Blog_Reader.exe' does not contain a static 'Main'
    method suitable for an entry point. 
    C:\Users\..........\Desktop\Blog_Reader\Blog_Reader\CSC    Blog_Reader
    But I found the solution while I fixing it.
    Solution for that is like below.
    Go to your App.Xaml and Right-Click thenGo to Properties
    Check whether the Build Action is
    ApplicationDefinition
    If not change it to ApplicationDefinition.
    Clean the code (solution) and Deploy
    Now the error is fiexed.

    Hi Robana, 
    Good sharing on the Technet. 
    This will definitely benefit other who may encounter the same issue as yours.
    Thanks for your sharing again. 
    Kate Li
    TechNet Community Support

  • Problem with OSB 11g - Unable to call non-static java methods

    I have a problem in OSB. Unable to see any java methods when loading java callout. I have checked the java classes in the .jar file and they are all non-static java methods.
    Is there any way where OSB is able to see this non-static java methods?
    Need help urgently!
    Thanks!

    Technical standpoint: Do you know why OSB is not able to call non-static methods?
    This is by design. Ability to call non-static methods require Object creation which adds additional complexity. eg How to pass variables in constructor?. How/where to store created object for use across across pipeline instance?. Object life cycle (when and how to create object) etc. To avoid above complexites static methods are only supported.
    "a lot of non-static method to call" just for my understanding what are the number involved?. If number is too high you can always request for a enhancement.
    Thanks
    Manoj

  • Managing memory in shared mode

    Dear all,
    1. Is the oracle shared server mode assign equal memory each session?
    And where i can find the document about managing memory of shared server mode ?
    Thks for advance
    Chara

    Thanks hsawwan
    I cannot find the documents
    Note: 461063.1 - HR and Financials Applications Installed as Full Instead of Shared
    Note: 461063.1 - Changing Oracle Human Resources Installation from FULL HR/FULL Payroll Install to SHARED HR/SHARED Payroll Install
    in Metalink. Do you have any idea if thos documents still available?
    Those documents change HRMS from Install to Shared Mode when the application is already installed.
    Is any way to install HRMS in shared mode before install the application?
    Regards
    Alvaro

  • Apply static method requirements on class (Static interface methods)?

    I have a set of classes where is class is identified with a unique ID number. So each class has a public static int getId() method. Each class also has either a constructor that takes a byte array or a static factory method that takes a byte array.
    I would like to maintain a hashmap of these classes keyed to the ID's however I am not sure how to have some interface of abstract parent class that requires each of these classes to implement these static methods.
    What I was hoping to do was something like this>>>
         public interface MyClasses{
              static MyClasses createInstance(byte[] data);
         HashMap<Integer, MyClasses> map;
         public void init() {
              map = new HashMap<Integer, MyClasses>();
              map.put(Class1.getId(), Class1.class);
              map.put(Class2.getId(), Class2.class);
         public void createInstance (int id, byte[] data) {
              map.get(id).createInstance(data);
         }Is there some way I could do this?

    What about something like this?
    public interface Initializable
         public void initialize(byte[] data);
    public class Factory
         private final Map<Integer, Initializable> map = new HashMap<Integer, Initializable>();
            public void registerClass(int id, Class klass)
                    if (! Initializable.class.isAssignableFrom(klass))
                             // you may also want to ensure the class declares a parameterless constructor
                             throw new IllegalArgumentException("duff class");
                    if (this.map.keySet().contains(id))
                             throw new IllegalArgumentException("duff id");
              this.map.put(id, klass);
         public Initializable createInstance(int id, byte[] data)
                    // need some exception handling of course
              Initializable i = map.get(id).newInstance();
                    i.initialize(data);
                    return i;
    }

  • Static synchronized methods VS non-static synchronized methods ??

    what is the difference between static synchronized methods and non-static synchronized methods as far as the behavior of the threads is concerned? if a thread is in static synchronized method can another thread access simple (ie. non static) synchronized methods?

    javanewbie80 wrote:
    Great. Thanks. This whole explanation made a lot of sense to me.Cool, glad I was able to help!
    Probably I was just trying to complicate things unnecessarily.It's a classic case of complexity inversion. It seems simpler to say something like "synchronization locks the class" or "...locks the method" than to give my explanation and then extrapolate the implications. Just like the seemingly simpler, but incorrect, "Java passes objects by reference," vs. the correct "Java passes references by value," or Java's seemingly complex I/O vs. other languages' int x = readInt(); or whatever.
    In the seemingly complex case, the primitive construct is simpler, but the higher level construct requires more assembly or derivation of the primitive constructs, making that case seem more complicated.
    Okay, I just re-read that, and it seems like I'm making no sense, but I'll leave it, just in case somebody can get some meaning out of it. :-)

  • Static factory methods, instead of constructor

    Hi All,
    why we use static factory methods, instead of constructor.
    Apart from Singleton class , what is use of static factory methods ?
    Thanks in Advance,
    Rishi

    One reason for using factories is that they simplify creating instances of immutable classes that might otherwise have messy constructors with lots of arguments.

  • Static abstract methods - how can I avoid them?

    Hi everybody,
    just found out that java doesn't allow static abstract methods nor static methods in interfaces. Although I understand the reasons, I can't think of how to change my design to gain the required behavior without the need of static abstract methods.
    Here's what I want to do and how my thoughts lead to static abstract methods:
    ClassA provides access to native code (c-dll, using jna). The path to the dll can be set programmatically. Here's a draft of the class:
    public ClassA {
       private static String path;
       public static void setRealtivePath(String path) {
          //check if path exists and is not null -> get absolute path
          setPath(path);
       public static void setPath(String absolutePath) {
          this.path = path;
      //code to provide access to native lib
    }There is some more classes which provide access to different dlls (therefore the code for accessing the dlls differs from ClassA). Although this works, the setRelativePath method has to be implemented in each class. I thought it would be nice to put this method into a abstract super class that looks like this:
    public abstract class superClass {
       public static void setRelativePath(String path) {
          //check if path exists and is not null -> get absolute path
          setPath(path);
       //force inherting class to implement a static method
       public static abstract void setPath(String absolutePath);
    }thus simplifying ClassA and it's look-a-likes:
    public ClassA {
       private static String path;
       @Override
       public static void setPath(String absolutePath) {
          this.path = path;
      //code to provide access to native lib
    }Since static abstract methods (and overriding static methods) is not allowed, this doesn't work.
    I hope someone can catch my idea ;). Any suggestions how to do this in a nice clean way?
    Thanks in advance,
    Martin
    Edited by: morty2 on Jul 22, 2009 2:57 AM

    First of all, thanks a lot for your answer.
    YoungWinston wrote:
    Actually, you can "override" static methods (in that you can write the same method for both a subclass and a superclass, providing the superclass method isn't final); it's just that it doesn't work polymorphically. The "overriding" method masks the overridden one and the determination of what gets called is entirely down to the declared type.Yes, I know that. There's one problem: Your suggestion means that I simply have to drop the abstract modifier in the super classes setPath method. However, since the super class calls the setPath method (and not the inherting classes!) it will always be the super classes' method being called.
    YoungWinston wrote:
    Why are you so concerned with making everything static? Seems to me that the simplest solution would be to make all the contents instance-based.I want ClassA and it's look-a-likes to be set up properly at application start up, be accessible quite anytime and easily, they don't do anything themselves except for setting the path and calling into the native library which does the math. (Compareable to how you call e.g. Math.cos()). Therefore I don't think that an instance-based solution would be a better approach.
    YoungWinston wrote:
    Furthermore, you could make the class immutable; which might be a good thing - I'm not sure I'd want someone being able to change the pathname after I've >set up a class like this.Thanks for that!
    PS: As mentioned in my first post, I do have a working solution. However, I'm really corious about finding a nicer and cleaner way to do it!
    Martin

Maybe you are looking for

  • Warning: The system has not been taken off maintenance mode completely

    After I enabled Maintenance mode using adadmin, I ran Compile Flexfields. Then I disabled Maintenance mode. But, on the 11i login page, I keep getting a warning message: Warning The system has not been taken off maintenance mode completely. Please co

  • What version of iTunes is best for X.3.8?

    What's the best version of iTunes for X.3.8? After a brief try of X.3.9 after getting a new hard disk, I downgraded back to OS X.3.8 to get back to Safari 1.2 and to get rid of iTunes 6.0.2/.3 which had low volume issues compared to iTunes 4.7. From

  • *** Email sent everytime when Comments are saved in Task List JSP Page ***

    Hi BPEL Gurus, I have a very critical production issue. Whenever a user enters or updates Comment in Task List JSP Page, an email is sent each & every time when he clicks on the update button for Comments. I tried removing the <action> sub-tag for 'A

  • Reducing amount of discrete vector objects [Acr 8]

    Any way to simplify vector objects in a PDF file? I have a page with complex maps. This PDF is placed in InDesign, scaled, and then I export to create a new PDF. Either at the source (linked PDF) or the final PDF, I'd like to simplify the vector map

  • This line give me error Map fillParams = new HashMap(); for calling ireport

    hi master sir i flow this link step by step http://developers.sun.com/jscreator/learning/tutorials/2/reports.html when i us this step Double-click the View Report button to display the Java source for the viewReportBtn_action method. Add the followin