Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

41
LINES

< > BotCompany Repo | #1001136 // nuObject - calls constructor with arguments

JavaX fragment (include) [tags: use-pretranspiled]

Libraryless. Click here for Pure Java version (7584L/43K).

static O nuObject(S className, O... args) ctex {
  ret nuObject(classForName(className), args);
}

// too ambiguous - maybe need to fix some callers
/*static O nuObject(O realm, S className, O... args) {
  ret nuObject(_getClass(realm, className), args);
}*/

static <A> A nuObject(Class<A> c, O... args) ctex {
  if (args == null || args.length == 0) ret nuObjectWithoutArguments(c); // cached!
  
  Constructor m = nuObject_findConstructor(c, args);
  makeAccessible(m);
  return (A) m.newInstance(args);
}

static Constructor nuObject_findConstructor(Class c, Object... args) {
  for (Constructor m : getDeclaredConstructors_cached(c)) {
    if (!nuObject_checkArgs(m.getParameterTypes(), args, false))
      continue;
    return m;
  }
  fail("Constructor " + c.getName() + getClasses(args) + " not found"
    + (args.length == 0 && (c.getModifiers() & java.lang.reflect.Modifier.STATIC) == 0 ? " - hint: it's a non-static class!" : ""));
}

 static boolean nuObject_checkArgs(Class[] types, Object[] args, boolean debug) {
    if (types.length != args.length) {
      if (debug)
        System.out.println("Bad parameter length: " + args.length + " vs " + types.length);
      return false;
    }
    for (int i = 0; i < types.length; i++)
      if (!(args[i] == null || isInstanceX(types[i], args[i]))) {
        if (debug)
          System.out.println("Bad parameter " + i + ": " + args[i] + " vs " + types[i]);
        return false;
      }
    return true;
  }

download  show line numbers  debug dex  old transpilations   

Travelled to 16 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mowyntqkapby, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt, wtqryiryparv

No comments. add comment

Snippet ID: #1001136
Snippet name: nuObject - calls constructor with arguments
Eternal ID of this version: #1001136/11
Text MD5: 676d75ee9055a0dfdb2a1954cd1aafc1
Transpilation MD5: f685b230f90e48485314deb03abd1dbc
Author: stefan
Category: javax
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2022-03-29 19:42:08
Source code size: 1509 bytes / 41 lines
Pitched / IR pitched: No / No
Views / Downloads: 905 / 4640
Version history: 10 change(s)
Referenced in: #1002427 - Accellerating 629 (SPIKE)
#1004785 - nuStubInnerObject - instantiates an inner class with a null reference to outer object
#1005599 - nuEmptyObject - fast way to make an empty instance of a class (using default constructor)
#1006654 - Standard functions list 2 (LIVE, continuation of #761)
#1008660 - nuObjectWithoutArguments
#1034783 - preciseNuObject - precise constructor call with conversions [like newPreciseCall, dev.]
#3000382 - Answer for ferdie (>> t = 1, f = 0)