সম্পত্তি শুরু করতে হবে বা বিমূর্ত হতে হবে


121

এটি অবশ্যই বোকামি প্রশ্ন, তবে আমি কোটলিনে সত্যিই নতুন এবং আমি এর কোনও সমাধান পাইনি।

ক্লাস ফিল্ড কিভাবে ঘোষণা করবেন? যেমনটি আমরা এটি জাভাতে থাকতে পারি:

protected SharedPreferences mSharedPreferences;

এবং পরে এতে onCreate():

mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

এখন আমি এটি যে কোনও জায়গায় এটি ব্যবহার করতে পারি (এই বেস ক্রিয়াকলাপের সাবক্লাসে)।

আমি কোটলিনেও এটি করার চেষ্টা করি:

protected var sharedPreferences : SharedPreferences

এবং এর মধ্যে onCreate():

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

তবে আমি একটি সতর্কতা পেয়েছি: "সম্পত্তি অবশ্যই শুরু করা উচিত বা বিমূর্ত হতে হবে"

উত্তর:


186

আপনি যদি কনস্ট্রাক্টরের বাইরে কোনও সম্পত্তি শুরু করতে চান, তবে দেরীতে-প্রাথমিকীকৃত বৈশিষ্ট্য যা আপনি খুঁজছেন তা। সংশোধকটির সাহায্যে সম্পত্তিটি ঘোষণা করুন lateinit, যা অন্যথায় প্রয়োজনীয় প্রারম্ভিকটিকে এড়িয়ে যেতে অনুমতি দেবে এবং কিছু অর্থপূর্ণ মান নির্ধারিত না করা পর্যন্ত ব্যতীত সম্পত্তি অ্যাক্সেস ব্যর্থ করে দেবে:

protected lateinit var sharedPreferences: SharedPreferences

12
আমি "সুরক্ষিত বিভিন্ন ভাগ করা পছন্দসই: SharedPreferences? = নাল" ব্যবহার করার চেষ্টা করেছি এবং এটিও কাজ করে, পার্থক্য কী?
আন্তন শকুরেঙ্কো

আমি দেখতে পাচ্ছি যে আমি যদি ডিআই-র জন্য ড্যাজার 2 ব্যবহার করি তবে আমাকে আপনার বৈকল্পিকটি ব্যবহার করতে হবে, তাই না?
আন্তন শকুরেঙ্কো

30
পার্থক্যটি হ'ল আপনি ল্যাটিনাইট দিয়ে অ-অযোগ্য মানগুলি ঘোষণা করতে পারেন।
কিরিল রাখমান

15

দৃশ্যমানতার জন্য আলেকজান্ডার উদালভের উত্তর থেকে মন্তব্যগুলি এড়িয়ে যাওয়া। অযোগ্য বৈশিষ্ট্যগুলির জন্য:

protected var sharedPreferences : SharedPreferences? = null

... এবং পরে এটির একটি মূল্য নির্ধারণ করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.