আমি ব্যবহার করতে চাই Class.newInstance()
তবে আমি যে ক্লাসটি ইনস্ট্যান্ট করছি তাতে কোনও নালারী কনস্ট্রাক্টর নেই। সুতরাং আমি কনস্ট্রাক্টর আর্গুমেন্টে পাস করতে সক্ষম হওয়া প্রয়োজন। এই কাজ করতে একটি উপায় আছে কি?
আমি ব্যবহার করতে চাই Class.newInstance()
তবে আমি যে ক্লাসটি ইনস্ট্যান্ট করছি তাতে কোনও নালারী কনস্ট্রাক্টর নেই। সুতরাং আমি কনস্ট্রাক্টর আর্গুমেন্টে পাস করতে সক্ষম হওয়া প্রয়োজন। এই কাজ করতে একটি উপায় আছে কি?
উত্তর:
MyClass.class.getDeclaredConstructor(String.class).newInstance("HERESMYARG");
অথবা
obj.getClass().getDeclaredConstructor(String.class).newInstance("HERESMYARG");
getDeclaredConstructor
কোনও স্থির পদ্ধতি নয়, আপনার নির্দিষ্ট শ্রেণির জন্য আপনাকে ক্লাসের উদাহরণে কল করতে হবে।
myObject.getClass().getDeclaredConstructors(types list).newInstance(args list);
সম্পাদনা করুন: মতামত অনুসারে মনে হচ্ছে শ্রেণিবদ্ধকরণ এবং পদ্ধতির নাম কিছু ব্যবহারকারীর পক্ষে যথেষ্ট নয়। আরও তথ্যের জন্য কনডাক্টর পেতে এবং এটি আহ্বান জানাতে ডকুমেন্টেশনটি একবার দেখুন ।
ধরে নিচ্ছি আপনার নীচের কনস্ট্রাক্টর রয়েছে
class MyClass {
public MyClass(Long l, String s, int i) {
}
}
আপনাকে এই নির্মাতাকে এভাবে ব্যবহার করার ইচ্ছেটি দেখাতে হবে:
Class classToLoad = MyClass.class;
Class[] cArg = new Class[3]; //Our constructor has 3 arguments
cArg[0] = Long.class; //First argument is of *object* type Long
cArg[1] = String.class; //Second argument is of *object* type String
cArg[2] = int.class; //Third argument is of *primitive* type int
Long l = new Long(88);
String s = "text";
int i = 5;
classToLoad.getDeclaredConstructor(cArg).newInstance(l, s, i);
ব্যবহার করবেন না Class.newInstance()
; এই থ্রেডটি দেখুন: Class.newInstance () কেন খারাপ?
অন্যান্য উত্তরগুলির মতো বলুন, Constructor.newInstance()
পরিবর্তে ব্যবহার করুন।
আপনি getConstructor (...) দিয়ে অন্য নির্মাণকারী পেতে পারেন ।
প্যারামিটারাইজড কনস্ট্রাক্টরকে কল করতে নীচের পদক্ষেপগুলি অনুসরণ করুন।
Constructor
ধরনের ক্ষণস্থায়ী দ্বারা প্যারামিটার ধরনের সঙ্গে Class[]
জন্য getDeclaredConstructor
পদ্ধতিClass
Object[]
জন্য newInstance
পদ্ধতিConstructor
উদাহরণ কোড:
import java.lang.reflect.*;
class NewInstanceWithReflection{
public NewInstanceWithReflection(){
System.out.println("Default constructor");
}
public NewInstanceWithReflection( String a){
System.out.println("Constructor :String => "+a);
}
public static void main(String args[]) throws Exception {
NewInstanceWithReflection object = (NewInstanceWithReflection)Class.forName("NewInstanceWithReflection").newInstance();
Constructor constructor = NewInstanceWithReflection.class.getDeclaredConstructor( new Class[] {String.class});
NewInstanceWithReflection object1 = (NewInstanceWithReflection)constructor.newInstance(new Object[]{"StackOverFlow"});
}
}
আউটপুট:
java NewInstanceWithReflection
Default constructor
Constructor :String => StackOverFlow
আপনি getDeclaredConstructor
ক্লাসের পদ্ধতিটি ব্যবহার করতে পারেন । এটি ক্লাসগুলির একটি অ্যারের প্রত্যাশা করে। এখানে একটি পরীক্ষিত এবং কাজের উদাহরণ:
public static JFrame createJFrame(Class c, String name, Component parentComponent)
{
try
{
JFrame frame = (JFrame)c.getDeclaredConstructor(new Class[] {String.class}).newInstance("name");
if (parentComponent != null)
{
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
else
{
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
frame.setLocationRelativeTo(parentComponent);
frame.pack();
frame.setVisible(true);
}
catch (InstantiationException instantiationException)
{
ExceptionHandler.handleException(instantiationException, parentComponent, Language.messages.get(Language.InstantiationExceptionKey), c.getName());
}
catch(NoSuchMethodException noSuchMethodException)
{
//ExceptionHandler.handleException(noSuchMethodException, parentComponent, Language.NoSuchMethodExceptionKey, "NamedConstructor");
ExceptionHandler.handleException(noSuchMethodException, parentComponent, Language.messages.get(Language.NoSuchMethodExceptionKey), "(Constructor or a JFrame method)");
}
catch (IllegalAccessException illegalAccessException)
{
ExceptionHandler.handleException(illegalAccessException, parentComponent, Language.messages.get(Language.IllegalAccessExceptionKey));
}
catch (InvocationTargetException invocationTargetException)
{
ExceptionHandler.handleException(invocationTargetException, parentComponent, Language.messages.get(Language.InvocationTargetExceptionKey));
}
finally
{
return null;
}
}
আমি মনে করি এই হল আপনি ঠিক কি আপনি চান http://da2i.univ-lille1.fr/doc/tutorial-java/reflect/object/arg.html
যদিও এটি একটি মৃত থ্রেড বলে মনে হচ্ছে, কেউ এটি দরকারী বলে মনে হতে পারে