কোটলিনে ধ্রুবকগুলি সংজ্ঞায়িত করার কয়েকটি উপায় রয়েছে,
সহযোগী অবজেক্ট ব্যবহার করা
companion object {
const val ITEM1 = "item1"
const val ITEM2 = "item2"
}
আপনি যেকোন শ্রেণীর অভ্যন্তরে উপরের সহযোগী অবজেক্ট ব্লকটি ব্যবহার করতে পারেন এবং এই ব্লকের ভিতরে থাকা সমস্ত ক্ষেত্রকেই সংজ্ঞায়িত করতে পারেন। তবে এই পদ্ধতির সাথে একটি সমস্যা রয়েছে, ডকুমেন্টেশন বলছে,
যদিও সহযোগী অবজেক্টের সদস্যরা অন্যান্য ভাষায় স্থির সদস্যের মতো দেখায়, রানটাইমে এগুলি এখনও বাস্তব বস্তুর সদস্য, এবং উদাহরণস্বরূপ, ইন্টারফেস প্রয়োগ করতে পারে।
আপনি যখন সঙ্গী অবজেক্টটি ব্যবহার করে আপনার ধ্রুবকগুলি তৈরি করেন এবং পচে যাওয়া বাইকোডটি দেখেন , আপনি নীচের মতো কিছু পাবেন,
ClassName.Companion Companion = ClassName.Companion.$$INSTANCE;
@NotNull
String ITEM1 = "item1";
@NotNull
String ITEM2 = "item2";
public static final class Companion {
@NotNull
private static final String ITEM1 = "item1";
@NotNull
public static final String ITEM2 = "item2";
// $FF: synthetic field
static final ClassName.Companion $$INSTANCE;
private Companion() {
}
static {
ClassName.Companion var0 = new ClassName.Companion();
$$INSTANCE = var0;
}
}
এখান থেকে আপনি সহজেই ডকুমেন্টেশন যা বলেছিলেন তা সহজেই দেখতে পাবেন, যদিও সহযোগী অবজেক্টের সদস্যরা অন্য ভাষায় স্থির সদস্যের মতো দেখায়, রানটাইমগুলিতে এখনও সত্যিকারের বস্তুর সদস্য হলেও এটি প্রয়োজনের তুলনায় অতিরিক্ত কাজ করে চলেছে।
এখন আর একটি উপায় এসেছে, যেখানে আমাদের নীচের মতো সহকর্মী অবজেক্ট ব্যবহার করার দরকার নেই,
object ApiConstants {
val ITEM1: String = "item1"
}
আবার যদি আপনি উপরের স্নিপেটের বাইট কোডটির ক্ষয়প্রাপ্ত সংস্করণটি দেখতে পান তবে আপনি এর মতো কিছু খুঁজে পাবেন,
public final class ApiConstants {
private static final String ITEM1 = "item1";
public static final ApiConstants INSTANCE;
public final String getITEM1() {
return ITEM1;
}
private ApiConstants() {
}
static {
ApiConstants var0 = new ApiConstants();
INSTANCE = var0;
CONNECT_TIMEOUT = "item1";
}
}
এখন আপনি যদি উপরের ডিসকোপিলড কোডটি দেখেন তবে এটি প্রতিটি ভেরিয়েবলের জন্য গেট পদ্ধতি তৈরি করে creating এই গেট পদ্ধতিটি মোটেই প্রয়োজন হয় না।
এই পেতে পদ্ধতি পরিত্রাণ পেতে , আপনি ব্যবহার করা উচিত const আগে Val নিচে মত,
object ApiConstants {
const val ITEM1: String = "item1"
}
এখন আপনি যদি উপরের স্নিপেটের পচনশীল কোডটি দেখতে পান তবে এটি আপনার কোডের জন্য সর্বনিম্ন ব্যাকগ্রাউন্ড রূপান্তর হিসাবে পড়তে সহজ হবে easier
public final class ApiConstants {
public static final String ITEM1 = "item1";
public static final ApiConstants INSTANCE;
private ApiConstants() {
}
static {
ApiConstants var0 = new ApiConstants();
INSTANCE = var0;
}
}
তাই এটি ধ্রুবক তৈরির সেরা উপায়।
public static final
জাভাতে কোনও ক্ষেত্রের সাথে সম্পর্কিত কিছু চান তবেconst val
আপনার সহযোগী অবজেক্টে ব্যবহার করুন । আপনি যদি কোনওprivate static final
ক্ষেত্র এবং পাবলিক গেটর চান তবেval
আপনার সহযোগী অবজেক্টে ব্যবহার করুন ।