জাভাতে স্থির পদ্ধতি থেকে শ্রেণীর নাম পাওয়া Get


244

সেই ক্লাসের স্ট্যাটিক পদ্ধতি থেকে কেউ কীভাবে ক্লাসের নাম জানতে পারে। উদাহরণ স্বরূপ

public class MyClass {
    public static String getClassName() {
        String name = ????; // what goes here so the string "MyClass" is returned
        return name;
    }
}

এটিকে প্রসঙ্গে বলতে গেলে আমি আসলে ব্যতিক্রমের বার্তার অংশ হিসাবে ক্লাসের নামটি ফিরিয়ে দিতে চাই।


try{ throw new RuntimeEsception();} catch(RuntimeEcxeption e){return e.getstackTrace()[1].getClassName();}
আর্মিভানবুরেন

উত্তর:


231

সঠিকভাবে রিফ্যাক্টরিং সমর্থন করার জন্য (শ্রেণীর নাম পরিবর্তন করুন), তারপরে আপনার ব্যবহার করা উচিত:

 MyClass.class.getName(); // full name with package

বা ( জেমস ভ্যান হুইসকে ধন্যবাদ ):

 MyClass.class.getSimpleName(); // class name and no more

136
আপনি যদি মাই ক্লাসের মতো জ্ঞানের মতো হার্ড-কোডে চলে যান তবে আপনি কেবল স্ট্রিং নামটি করতে পারেন = "মাই ক্লাস"; !
জন টপলি

111
তবে তারপরে, আপনার আইডিইতে ক্লাসের নামটি রিফ্যাক্ট করা সঠিকভাবে কাজ করবে না।
জেমস ভ্যান হুইস

9
সত্য। যদিও মাইক্লাস.ক্লাস নিশ্চিত করবে যে এই লাইনটি কোনও 'পরিবর্তন শ্রেণীর নাম' রিফ্যাক্টরিং
টুলকিট

19
আমি চান তবে "এই" একটি স্ট্যাটিক প্রেক্ষাপটে কাজ জাভা বর্তমান ক্লাস মানে, যে যে "class.xxx" এই শ্রেণীর মানে পারেন উদাহরণস্বরূপ বা স্ট্যাটিক কোডে অনুমতি দেওয়া হয়েছিল! এটির সাথে সমস্যাটি হ'ল মাইক্লাসটি প্রসঙ্গে, ভার্জোজ এবং অপ্রয়োজনীয়। তবে তার পরে আমি যতটা জাভা পছন্দ করি তা ভারবোসিটির দিকে ঝুঁকছে বলে মনে হয়।
লরেন্স ডল

51
যদি আমি একটি সাবক্লাসে স্থির পদ্ধতিটি কল করি এবং আমি সাবক্লাসের নামটি চাই?
এডওয়ার্ড ফ্যালক

120

টুলকিট যা বলে তা করুন। এর মতো কিছু করবেন না:

return new Object() { }.getClass().getEnclosingClass();

7
যদি শ্রেণিটি অন্য একটিকে প্রসারিত করে তবে এটি আসল শ্রেণীটি দেয় না, কেবলমাত্র বেস শ্রেণি।
লুইস সোয়েরো

1
@ লুইসোইয়েরো আমি বিশ্বাস করি যে পদ্ধতিটি সংজ্ঞায়িত হয়েছে সেই শ্রেণীটি এটি ফিরিয়ে দিয়েছে I'm আমি নিশ্চিত নই কীভাবে স্থিতি প্রসঙ্গে বেস ক্লাসের উপাদানগুলি তৈরি হয়।
টম হাটিন -

8
আমি বুঝতে পারি না কেন getClass () স্থির থাকতে পারে না। এই "মূর্খতা" তখন প্রয়োজন হবে না।
মিমিরওয়াল্ড

1
@ এম্মিরওয়াল্ড getClassরানটাইম টাইপটি প্রদান করে, তাই স্থির থাকতে পারে না।
টম হাটিন -

5
এটিই আসল উত্তর। কারণ আপনার নিজের কোডে নিজের ক্লাসের নাম লেখার দরকার নেই।
ববস

99

জাভা 7+ এ আপনি স্থির পদ্ধতিতে / ক্ষেত্রগুলিতে এটি করতে পারেন:

MethodHandles.lookup().lookupClass()

আমি বলছিলাম Reflection.getCallerClass()। তবে এটি 'সান' প্যাকেজগুলিতে থাকার বিষয়ে একটি সতর্কতা দেয়। সুতরাং এটি একটি ভাল সমাধান হতে পারে।
ফম্পি

1
@ ফম্পি: জাভা 9 একটি আনুষ্ঠানিক এপিআই প্রবর্তন করতে চলেছে যা এই আনুষ্ঠানিক Reflection.getCallerClass()বিষয়টিকে ছাড়িয়ে যাবে । এটি তার তুচ্ছ অপারেশনের জন্য কিছুটা জটিল, অর্থাত্ Optional<Class<?>> myself = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE) .walk(s -> s.map(StackWalker.StackFrame::getDeclaringClass) .findFirst());, তবে অবশ্যই এটি এটি আরও শক্তিশালী হবে এই সত্যের সাথে সংযুক্ত।
হলগার

6
এটি সহজেই সেরা সমাধান। এটি প্রকৃত শ্রেণীর নাম উল্লেখ করার প্রয়োজনকে এড়িয়ে চলে, এটি অস্পষ্ট নয়, এটি কোনও হ্যাক নয় এবং এটির নীচে আর্টিয়াম ক্রিভোলাপভের পোস্ট অনুসারে এটিও দ্রুততম পদ্ধতির মাধ্যমে।
স্কোমিসা

@ রেইন যদি বেস ক্লাসে ডাকা হয় তবে রানটাইম ক্লাস করার কোনও উপায় আছে?
গ্লাইড করুন

59

সুতরাং, আমাদের এমন একটি পরিস্থিতি রয়েছে যখন আমাদের স্ট্যাটিকভাবে MyClass.classসিনট্যাক্সের স্পষ্ট ব্যবহার ছাড়াই ক্লাস অবজেক্ট বা শ্রেণীর পুরো / সাধারণ নামটি পেতে হবে ।

এটি কিছু ক্ষেত্রে সত্যিই সুবিধাজনক হতে পারে, যেমন: লগারের উদাহরণটি উচ্চ স্তরের ফাংশন (এই ক্ষেত্রে কোটলিন একটি স্ট্যাটিক জাভা ক্লাস তৈরি করে যা কোটলিন কোড থেকে অ্যাক্সেসযোগ্য নয়)।

এই তথ্যটি পাওয়ার জন্য আমাদের কয়েকটি পৃথক রূপ রয়েছে:

  1. new Object(){}.getClass().getEnclosingClass();
    টম হাটিন দ্বারা উল্লিখিত - ট্যাকলাইন

  2. getClassContext()[0].getName();ক্রিস্টোফারSecurityManager
    দ্বারা উল্লিখিত থেকে

  3. new Throwable().getStackTrace()[0].getClassName();
    গণনা দ্বারা ludwig

  4. Thread.currentThread().getStackTrace()[1].getClassName();
    কেকসি থেকে

  5. এবং অবশেষে রেইন
    MethodHandles.lookup().lookupClass();
    থেকে দুর্দান্ত


আমি একটি প্রস্তুত করেছি সমস্ত রূপ এবং ফলাফলের জন্য মানদণ্ড হ'ল:

# Run complete. Total time: 00:04:18

Benchmark                                                      Mode  Cnt      Score     Error  Units
StaticClassLookup.MethodHandles_lookup_lookupClass             avgt   30      3.630 ±   0.024  ns/op
StaticClassLookup.AnonymousObject_getClass_enclosingClass      avgt   30    282.486 ±   1.980  ns/op
StaticClassLookup.SecurityManager_classContext_1               avgt   30    680.385 ±  21.665  ns/op
StaticClassLookup.Thread_currentThread_stackTrace_1_className  avgt   30  11179.460 ± 286.293  ns/op
StaticClassLookup.Throwable_stackTrace_0_className             avgt   30  10221.209 ± 176.847  ns/op


উপসংহার

  1. ব্যবহারের জন্য সেরা বৈকল্পিক , বরং পরিষ্কার এবং মারাত্মকভাবে দ্রুত।
    কেবল জাভা 7 এবং অ্যান্ড্রয়েড এপিআই 26 এর পরে উপলব্ধ!
 MethodHandles.lookup().lookupClass();
  1. আপনার যদি অ্যান্ড্রয়েড বা জাভা 6 এর জন্য এই কার্যকারিতাটির প্রয়োজন হয় তবে আপনি দ্বিতীয় সেরা রূপটি ব্যবহার করতে পারেন। এটি বরং দ্রুত, তবে প্রতিটি ব্যবহারের জায়গায় বেনাম শ্রেণি তৈরি করে :(
 new Object(){}.getClass().getEnclosingClass();
  1. আপনার যদি অনেক জায়গায় এটির প্রয়োজন হয় এবং অজানা ক্লাসের কারণে আপনার বাইটকোডটি ফোটতে চান না - SecurityManagerএটি আপনার বন্ধু (তৃতীয় সেরা বিকল্প)।

    তবে আপনি কেবল কল করতে পারবেন না getClassContext()- এটি এর মধ্যে সুরক্ষিতSecurityManager ক্লাসে । আপনার এর মতো কিছু সহায়ক শ্রেণীর প্রয়োজন হবে:

 // Helper class
 public final class CallerClassGetter extends SecurityManager
 {
    private static final CallerClassGetter INSTANCE = new CallerClassGetter();
    private CallerClassGetter() {}

    public static Class<?> getCallerClass() {
        return INSTANCE.getClassContext()[1];
    }
 }

 // Usage example:
 class FooBar
 {
    static final Logger LOGGER = LoggerFactory.getLogger(CallerClassGetter.getCallerClass())
 }
  1. getStackTrace()ব্যতিক্রম বা এর উপর ভিত্তি করে আপনার সম্ভবত শেষ দুটি রূপগুলি ব্যবহার করার দরকার নেই Thread.currentThread()খুব অদক্ষ এবং শুধুমাত্র হিসাবে শ্রেণীর নাম ফিরে আসতে পারেString , Class<*>উদাহরণ নয়।


পুনশ্চ

আপনি যদি স্থির কোটলিন ব্যবহারের জন্য লগার উদাহরণ তৈরি করতে চান (আমার মতো :), আপনি এই সহায়কটি ব্যবহার করতে পারেন:

import org.slf4j.Logger
import org.slf4j.LoggerFactory

// Should be inlined to get an actual class instead of the one where this helper declared
// Will work only since Java 7 and Android API 26!
@Suppress("NOTHING_TO_INLINE")
inline fun loggerFactoryStatic(): Logger
    = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass())

ব্যবহারের উদাহরণ:

private val LOGGER = loggerFactoryStatic()

/**
 * Returns a pseudo-random, uniformly distributed value between the
 * given least value (inclusive) and bound (exclusive).
 *
 * @param min the least value returned
 * @param max the upper bound (exclusive)
 *
 * @return the next value
 * @throws IllegalArgumentException if least greater than or equal to bound
 * @see java.util.concurrent.ThreadLocalRandom.nextDouble(double, double)
 */
fun Random.nextDouble(min: Double = .0, max: Double = 1.0): Double {
    if (min >= max) {
        if (min == max) return max
        LOGGER.warn("nextDouble: min $min > max $max")
        return min
    }
    return nextDouble() * (max - min) + min
}

38

এই নির্দেশনাটি ভাল কাজ করে:

Thread.currentThread().getStackTrace()[1].getClassName();

5
যত্ন নিন, এটি সত্যিই ধীর হতে পারে। তবে আপনি এটি কপি করতে পারেন।
গ্যাবার লিপটিক

1
এটি প্রতিবার ব্যবহার করার পরে কোনও অবজেক্ট বা থ্রেড তৈরি না করার অতিরিক্ত সুবিধা রয়েছে।
এরেল সেগাল-হালেভি

5
@ ইরেলসাগালহালেভি এটি ব্যাকগ্রাউন্ডে স্ট্যাকট্রেস এলিমেন্টের পুরোটা তৈরি করেছে যদিও :(
নভিন

4
আপনি যদি উত্সের কোডটি Thread.getStackTrace()দেখেন তবে আপনি দেখতে পাবেন যে এটিতে return (new Exception()).getStackTrace();ডেকে আনা হওয়ার ক্ষেত্রে ব্যতিরেকে আর কিছুই করা হয় না currentThread()। সুতরাং @ অ্যাকাউন্ট লুডভিগের সমাধান হ'ল এটি অর্জনের আরও প্রত্যক্ষ উপায়।
টি-বুল

34

আপনি জেএনআই যেমন ব্যবহার করে সত্যিই মিষ্টি কিছু করতে পারেন:

MyObject.java:

public class MyObject
{
    static
    {
        System.loadLibrary( "classname" );
    }

    public static native String getClassName();

    public static void main( String[] args )
    {
        System.out.println( getClassName() );
    }
}

তারপর:

javac MyObject.java
javah -jni MyObject

তারপর:

MyObject.c:

#include "MyObject.h"

JNIEXPORT jstring JNICALL Java_MyObject_getClassName( JNIEnv *env, jclass cls )
{
    jclass javaLangClass = (*env)->FindClass( env, "java/lang/Class" );
    jmethodID getName = (*env)->GetMethodID( env, javaLangClass, "getName",
        "()Ljava/lang/String;" );
    return (*env)->CallObjectMethod( env, cls, getName );
}

তারপরে সিটিকে একটি ভাগ করা লাইব্রেরিতে সংকলন করুন libclassname.so এবং জাভাটি চালান!

* মৃদুহাস্য


কেন এটি অন্তর্নির্মিত হয় না?
ggb667

চতুর, এবং আমি কৌতুক প্রশংসা করি। মলমে মাছিটি হ'ল সি ফাংশনের ডিফল্ট Java_MyObject_getClassNameনামটিতে এমবেড করা থাকে। এর চারপাশের উপায়টি হল জেএনআই ব্যবহার করা RegisterNatives। অবশ্যই আপনাকে এটি জেএনআই দিয়ে খাওয়াতে হবে FindClass(env, 'com/example/MyObject'), সুতরাং সেখানে কোনও জয় নেই।
Renate

2
@ রেনেট করুন, তাহলে এই পুরো উত্তরটি আসলে একটি রসিকতা? যদি তা হয় তবে দয়া করে এটিকে খুব স্পষ্ট করুন কারণ আপনি জানেন যে আমাদের অন্যান্য লোকদের সহায়তা করার কথা রয়েছে, তাই আসুন নির্দোষদের ফাঁদে ফেলে দেই না।
স্টাফেন গৌরিচন

ঠিক আছে, এটি আমার রসিকতা ছিল না এবং আমি উল্লেখ করেছি যে এটি একটি রসিকতা। এই দৃশ্যের ব্যবহারের ক্ষেত্রে সাধারণত লগগুলিতে শ্রেণি সনাক্ত করা যায়। সমস্ত জটিলতা দূরে সরিয়ে, এটি সাধারণত হয় তা করতে ফোটে: private static final String TAG = "MyClass"বা private static final String TAG = MyClass.class.getSimpleName();দ্বিতীয়টি আইডিই ব্যবহার করে বিশ্বব্যাপী শ্রেণীর নামকরণের জন্য আরও বন্ধুত্বপূর্ণ।
Renate

20

আমি আমার ক্লাসগুলির শীর্ষে লগ 4 জে লগারটি ডিগ্রি করতে এটি ব্যবহার করি (বা টীকাদান)।

প্রো: থ্রোয়েবল ইতিমধ্যে লোড হয়েছে এবং আপনি "আইও ভারী" সিকিউরিটি ম্যানেজার ব্যবহার না করে সংস্থানগুলি সংরক্ষণ করতে পারেন।

কন: এটি সমস্ত জেভিএম-এর পক্ষে কাজ করবে কিনা তা নিয়ে কিছু প্রশ্ন।

// Log4j . Logger --- Get class name in static context by creating an anonymous Throwable and 
// getting the top of its stack-trace. 
// NOTE you must use: getClassName() because getClass() just returns StackTraceElement.class 
static final Logger logger = Logger.getLogger(new Throwable() .getStackTrace()[0].getClassName()); 

আপনার নিজস্ব ব্যতিক্রম শ্রেণি তৈরি করুন যাতে jvm
4F2E4A2E

1
আপনি যদি এই সমাধানটির মতো ভয়ঙ্কর কিছু প্রস্তাব দিতে চান তবে সিকিউরিটি ম্যানেজারকে অপব্যবহারের মতো আরও একটি ভয়াবহ সমাধানের পরিবর্তে দয়া করে কমপক্ষে আপনার পেশাদারদের MyClass.class.getName () ব্যবহারের প্রাকৃতিক সমাধানের সাথে সম্পর্কিত করুন।
সেরেন বোইসেন

আরও কনস: খুব ভার্জোজ; ধীরে ধীরে (এটি আসলে একটি ছোটখাটো পয়েন্ট কারণ এটি কেবল একবার চালানো হয়, যখন ক্লাসটি বোঝাই হয়)।
টুলফোজার

13

সিকিউরিটি ম্যানেজারটি আপত্তিজনক করুন

System.getSecurityManager().getClassContext()[0].getName();

অথবা, যদি সেট না করা থাকে তবে একটি অভ্যন্তর শ্রেণি ব্যবহার করুন যা এটি প্রসারিত করে (নীচে উদাহরণস্বরূপ রিয়ালের হাওটো থেকে অনুলিপি করা হয়েছে ):

public static class CurrentClassGetter extends SecurityManager {
    public String getClassName() {
        return getClassContext()[1].getName(); 
    }
}

9

আপনি যদি এটির সাথে পুরো প্যাকেজের নাম চান তবে কল করুন:

String name = MyClass.class.getCanonicalName();

আপনি যদি কেবলমাত্র শেষ উপাদানটি চান, কল করুন:

String name = MyClass.class.getSimpleName();

5

কলারের ক্লাসের ভারব্যাটিম ব্যবহারের মতো MyClass.class.getName()কাজটি আসলে কাজ করে তবে আপনি যদি এই কোডটি অসংখ্য ক্লাস / সাবক্লাসে এই কোডটি প্রচার করেন তবে আপনি যদি এই কোডটি প্রচার করেন তবে অনুলিপি / অনুলিপি করতে প্রবণ।

এবং টম হাটিনের রেসিপিটি আসলে খারাপ নয়, একটি এটি সঠিক উপায়ে রান্না করা প্রয়োজন :)

আপনার যদি একটি স্ট্যাটিক পদ্ধতি সহ একটি বেস ক্লাস থাকে যা সাবক্লাস থেকে আহ্বান করা হতে পারে, এবং এই স্ট্যাটিক পদ্ধতিতে প্রকৃত কলারের শ্রেণিটি জানতে হবে, এটি নিম্নলিখিতগুলির মতো অর্জন করা যেতে পারে:

class BaseClass {
  static sharedStaticMethod (String callerClassName, Object... otherArgs) {
    useCallerClassNameAsYouWish (callerClassName);
    // and direct use of 'new Object() { }.getClass().getEnclosingClass().getName()'
    // instead of 'callerClassName' is not going to help here,
    // as it returns "BaseClass"
  }
}

class SubClass1 extends BaseClass {
  static someSubclassStaticMethod () {
    // this call of the shared method is prone to copy/paste errors
    sharedStaticMethod (SubClass1.class.getName(),
                        other_arguments);
    // and this call is safe to copy/paste
    sharedStaticMethod (new Object() { }.getClass().getEnclosingClass().getName(),
                        other_arguments);
  }
}

4

একটি রিফ্যাক্টরিং-নিরাপদ, কাটা এবং পেস্ট-নিরাপদ সমাধান যা নীচে অ্যাড-হক ক্লাসের সংজ্ঞা এড়িয়ে চলে।

স্ট্যাটিক পদ্ধতি লিখুন যা শ্রেণীর নামটি পদ্ধতির নামটিতে অন্তর্ভুক্ত করার যত্ন সহকারে ক্লাসের নাম পুনরুদ্ধার করে:

private static String getMyClassName(){
  return MyClass.class.getName();
}

তারপরে এটি আপনার স্থির পদ্ধতিতে স্মরণ করুন:

public static void myMethod(){
  Tracer.debug(getMyClassName(), "message");
}

রিফ্যাক্টরিং সুরক্ষা স্ট্রিংয়ের ব্যবহার এড়ানো থেকে দেওয়া হয়, কাটা ও পেস্ট করা সুরক্ষা দেওয়া হয় কারণ আপনি কলার পদ্ধতিটি কাটাতে বা পেস্ট করলে আপনি "মাই ক্লাস 2" শ্রেণিতে getMyClassName () পাবেন না, তাই আপনাকে এটি পুনরায় সংজ্ঞায়িত করতে এবং আপডেট করতে বাধ্য করা হবে।


3

প্রশ্নটি `ClassName.class` এর পরিবর্তে of this.class` এর মতো কিছু? এটির জন্য একটি সদৃশ হিসাবে চিহ্নিত করা হয়েছে (যা তর্কযোগ্য কারণ কারণ প্রশ্নটি ক্লাসের নামের পরিবর্তে শ্রেণি সম্পর্কে), আমি উত্তরটি এখানে পোস্ট করছি:

class MyService {
    private static Class thisClass = MyService.class;
    // or:
    //private static Class thisClass = new Object() { }.getClass().getEnclosingClass();
    ...
    static void startService(Context context) {
        Intent i = new Intent(context, thisClass);
        context.startService(i);
    }
}

এটি ব্যক্তিগতthisClass হিসাবে সংজ্ঞায়িত করা গুরুত্বপূর্ণ কারণ: 1) এটি উত্তরাধিকার সূত্রে প্রাপ্ত হওয়া উচিত নয়: উত্পন্ন শ্রেণিগুলিকে অবশ্যই তাদের নিজস্ব সংজ্ঞা দিতে হবে বা একটি ত্রুটি বার্তা উত্পন্ন করতে হবে 2) অন্যান্য শ্রেণি থেকে রেফারেন্স না করে বরং করা উচিত ।
thisClass
ClassName.classClassName.thisClass

সঙ্গে thisClassসংজ্ঞায়িত, বর্গ নাম এক্সেস হয়ে:

thisClass.getName()

1

একাধিক ক্লাসের স্থির পদ্ধতিতে আমার ক্লাসের নাম প্রয়োজন ছিল তাই আমি নিম্নলিখিত পদ্ধতি সহ একটি জাভাটিল ক্লাস প্রয়োগ করেছি:

public static String getClassName() {
    String className = Thread.currentThread().getStackTrace()[2].getClassName();
    int lastIndex = className.lastIndexOf('.');
    return className.substring(lastIndex + 1);
}

আশা করি এটি সাহায্য করবে!


1
2 নম্বর ম্যাজিকের কারণে এটি কেবল ব্যবহার করা খারাপ নয় (এটি সহজেই নুলপয়েন্টার এক্সসেপশন হতে পারে), তবে আপনি ভার্চুয়াল মেশিনের নির্ভুলতার উপর খুব বেশি নির্ভরশীল। পদ্ধতির জাভাডোক থেকে: * কিছু ভার্চুয়াল মেশিন কিছু পরিস্থিতিতে স্ট্যাক ট্রেস থেকে এক বা একাধিক স্ট্যাক ফ্রেম বাদ দিতে পারে। চরম ক্ষেত্রে, এই থ্রেড সম্পর্কিত কোনও স্ট্যাক ট্রেস তথ্য নেই এমন ভার্চুয়াল মেশিনকে এই পদ্ধতি থেকে শূন্য দৈর্ঘ্যের অ্যারে ফেরত দেওয়ার অনুমতি দেওয়া হয়। *
শটগান

0

আমি উভয় staticএবং non staticদৃশ্যের জন্য এই দুটি পদ্ধতির ব্যবহার করেছি :

প্রধান শ্রেণি:

//For non static approach
public AndroidLogger(Object classObject) {
    mClassName = classObject.getClass().getSimpleName();
}

//For static approach
public AndroidLogger(String className) {
    mClassName = className;
}

শ্রেণীর নাম কীভাবে সরবরাহ করবেন:

অ স্থির উপায়:

private AndroidLogger mLogger = new AndroidLogger(this);

স্থির উপায়:

private static AndroidLogger mLogger = new AndroidLogger(Myclass.class.getSimpleName());

-1

আপনি যদি প্রতিবিম্ব ব্যবহার করে থাকেন তবে আপনি মেথড অবজেক্টটি পেতে পারেন এবং তারপরে:

method.getDeclaringClass().getName()

পদ্ধতিটি নিজেই পেতে, আপনি সম্ভবত ব্যবহার করতে পারেন:

Class<?> c = Class.forName("class name");
Method  method = c.getDeclaredMethod ("method name", parameterTypes)

3
এবং কীভাবে আপনি জানতে পারবেন: "শ্রেণীর নাম"? :)
আলফাসিন

1
রয়ে Class.forName("class name")ইতিমধ্যে আপনার একটি বর্গ দেব। আপনি কেন এটি পদ্ধতির মাধ্যমে পুনরুদ্ধার করতে চান?
সের্গেই আইরিসভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.