Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java Object Without a Class

I don't know if this is possible in Java but I was wondering if it is possible to use an object in Java to return multiple values without using a class.

Normally when I want to do this in Java I would use the following

public class myScript {

    public static void main(String[] args) {

        // initialize object class
        cl_Object   lo_Object   = new cl_Object(0, null);

        // populate object with data
        lo_Object = lo_Object.create(1, "test01");
        System.out.println(lo_Object.cl_idno + " - " + lo_Object.cl_desc);

        //
        // code to utilize data here
        //

        // populate object with different data
        lo_Object = lo_Object.create(2, "test02");
        System.out.println(lo_Object.cl_idno + " - " + lo_Object.cl_desc);

        //
        // code to utilize data here
        //

    }

}

// the way I would like to use (even though it's terrible)

class cl_Object {

    int      cl_idno   = 0;
    String   cl_desc   = null;
    String   cl_var01  = null;
    String   cl_var02  = null;

    public cl_Object(int lv_idno, String lv_desc) {
        cl_idno  = lv_idno;
        cl_desc  = lv_desc;
        cl_var01 = "var 01";
        cl_var02 = "var 02";
    }

    public cl_Object create(int lv_idno, String lv_desc) {
        cl_Object   lo_Object   = new cl_Object(lv_idno, lv_desc);
        return lo_Object;
    }

}

// the way I don't really like using because they get terribly long

class Example {

    int      idno = 0;
    String   desc = null;
    String   var01 = null;
    String   var02 = null;

    public void set(int idno, String desc) {
        this.idno = idno;
        this.desc = desc;
        var01     = "var 01";
        var02     = "var 02";
    }

    public int idno() {
        return idno;
    }

    public String desc() {
        return desc;
    }

    public String var01() {
        return var01;
    }

    public String var02() {
        return var02;
    }

}

Which seems like a lot of work considering in Javascript (I know they are different) I can achieve the same effect just doing

var lo_Object = f_Object();
console.log(lo_Object["idno"] + " - " + lo_Object[desc]);

function f_Object() {

    var lo_Object = {};

    lo_Object = {};
    lo_Object["idno"] = 1;
    lo_Object["desc"] = "test01";

    return lo_Object;

}

NOTE

I know the naming convention is wrong but it is intentional because I have an informix-4gl program that runs with this program so the coding standards are from the company I work for

like image 398
TheLovelySausage Avatar asked Oct 14 '25 09:10

TheLovelySausage


1 Answers

The best way to do this is to use HashMap<String, Object>

import java.util.HashMap;

public class Main {
    public static void main(String[] args) {
        HashMap<String, Object> person =
            new HashMap<String, Object>();
        
        // add elements dynamically
        person.put("name", "Lem");
        person.put("age", 46);
        person.put("gender", 'M');

        // prints the name value
        System.out.println(person.get("name")); 
       
        // asures that age element is of integer type before  
        // printing
        System.out.println((int)person.get("age"));
        
        // prints the gender value
        System.out.println(person.get("gender"));
       
        // prints the person object {gender=M, name=Lem, age=46}
        System.out.println(person); 
    }
}

The advantage of doing this is that you can add elements as you go. The downside of this is that you will lose type safety like in the case of the age. Making sure that age is always an integer has a cost. So to avoid this cost just use a class.

like image 152
LEMUEL ADANE Avatar answered Oct 16 '25 23:10

LEMUEL ADANE