একটি ব্যবহার Var C # শব্দ অন্তর্নিহিত টাইপ ঘোষণা করা হয়। জাভা সমতুল্য সিনট্যাক্স কি Var ?
একটি ব্যবহার Var C # শব্দ অন্তর্নিহিত টাইপ ঘোষণা করা হয়। জাভা সমতুল্য সিনট্যাক্স কি Var ?
উত্তর:
কেউ নেই. হায়, আপনাকে পুরো টাইপের নামটি টাইপ করতে হবে।
সম্পাদনা: পোস্ট হওয়ার 7 বছর পরে, var
জাভা 10-এ স্থানীয় ভেরিয়েবলগুলির (সহ ) জন্য অনুকরণ টাইপ করুন ।
সম্পাদনা করুন: নীচে থেকে কিছু মন্তব্য সংগ্রহ করার জন্য পোস্ট হওয়ার 6 বছর পরে:
সি # এর var
কীওয়ার্ড থাকার কারণ হ'ল .NET- তে কোনও প্রকারের নাম থাকতে পারে। উদাহরণ:
var myData = new { a = 1, b = "2" };
এই ক্ষেত্রে, এটির জন্য সঠিক ধরণ দেওয়া অসম্ভব myData
। 6 বছর আগে, জাভাতে এটি অসম্ভব ছিল (সমস্ত প্রকারের নাম ছিল, যদিও তারা চূড়ান্তভাবে ভার্ভোজ এবং উদ্বেগহীন ছিল)। আমি জানি না এটি সময়ে সময়ে পরিবর্তিত হয়েছে কিনা?
var
যেমন হয় না dynamic
। var
Iables এখনও 100% স্থিতিযুক্ত টাইপ করা হয়। এটি সংকলন করবে না:
var myString = "foo";
myString = 3;
var
প্রকার থেকে প্রকারটি সুস্পষ্ট হলে তাও কার্যকর। উদাহরণ স্বরূপ:
var currentUser = User.GetCurrent();
আমি বলতে পারি যে আমি যে কোনও কোডের জন্য দায়বদ্ধ, currentUser
তার মধ্যে একটি User
বা উদ্ভূত শ্রেণি রয়েছে। স্পষ্টতই, যদি আপনার বাস্তবায়নটি User.GetCurrent
কোনও পূর্বাবস্থায় ফিরে আসে, তবে সম্ভবত এটি আপনার পক্ষে ক্ষতি।
এটির কোনও যোগসূত্র নেই var
, তবে আপনার যদি অদ্ভুত উত্তরাধিকারের শ্রেণিবদ্ধতা থাকে যেখানে আপনি অন্যান্য পদ্ধতিগুলির (যেমন new public void DoAThing()
) শ্যাডো পদ্ধতিগুলি ব্যবহার করেন তবে ভুলে যাবেন না যে অ-ভার্চুয়াল পদ্ধতিগুলি সেটির ধরণের দ্বারা প্রভাবিত হয়।
আমি এমন কোনও বাস্তব বিশ্বের দৃশ্যের কল্পনা করতে পারি না যেখানে এটি ভাল ডিজাইনের সূচক, তবে এটি আপনার প্রত্যাশার মতো কার্যকর নাও হতে পারে:
class Foo {
public void Non() {}
public virtual void Virt() {}
}
class Bar : Foo {
public new void Non() {}
public override void Virt() {}
}
class Baz {
public static Foo GetFoo() {
return new Bar();
}
}
var foo = Baz.GetFoo();
foo.Non(); // <- Foo.Non, not Bar.Non
foo.Virt(); // <- Bar.Virt
var bar = (Bar)foo;
bar.Non(); // <- Bar.Non, not Foo.Non
bar.Virt(); // <- Still Bar.Virt
ইঙ্গিত হিসাবে, ভার্চুয়াল পদ্ধতিগুলি এর দ্বারা প্রভাবিত হয় না।
না, var
প্রকৃত পরিবর্তনশীল ব্যতীত আরম্ভ করার কোনও অ-বে cl মান উপায় নেই।
var foo1 = "bar"; //good
var foo2; //bad, what type?
var foo3 = null; //bad, null doesn't have a type
var foo4 = default(var); //what?
var foo5 = (object)null; //legal, but go home, you're drunk
এই ক্ষেত্রে, এটি কেবল পুরাতন পদ্ধতিতে করুন:
object foo6;
var p = new X(); p.Z()
হিসাবে একই নয় SuperX p = new X(); p.Z()
সব X এবং এবং SuperX জন্য, যদিও X : SuperX
। সঙ্গে স্ট্যাটিক ধরনের সর্বদা উপরে প্রথম উদাহরণে, কিন্তু সবসময় দ্বিতীয় উদাহরণে। সচেতন হতে একটি সূক্ষ্ম কিন্তু গুরুত্বপূর্ণ পার্থক্য। তবে আপনার উত্তরটি খুব সঠিক :-)var
p
X
SuperX
var
কোডটি কম পরিষ্কার করে না। বরং আমার মতে বিপরীত। উদাহরণস্বরূপ আপনি যখন এটি ঘোষণা করেন এবং তত্ক্ষণিত করেন তখন একই সারিতে দুটি (বা এমনকি তিনটি) টাইপ লিখুন কেন RadioButton radioButton = new RadioButton();
? var
আপনি যখন আপনার ভেরিয়েবলের নামকরণ করছেন তখন আপনাকে দ্বিগুণ ভাবাতে বাধ্য করে কারণ এটি প্রকারের পরিবর্তে কার্যকারিতাটির দিকে ফোকাস ঘুরিয়ে দেয় (উদাহরণস্বরূপ UserCollection collection = new userRepository.GetUsers();
আরও প্রাকৃতিকভাবে পরিবর্তিত হয় var users = userRepository.GetUsers();
)। আপনি যদি var
অস্পষ্ট মনে করেন তবে এটি এটির অব্যবহৃত কারণ।
var
খুব স্পষ্টভাবে কোড পরিষ্কারভাবে ব্যবহার করতে পারে তবে এটি এটিকে খুব খারাপভাবে ব্যবহার করাও অস্পষ্ট করতে পারে; অনেকগুলি ফরম্যাটিং বিকল্পের মতো। আপনি বেনামে থাকা অবজেক্ট এবং জেনেরিকগুলি কতটা ব্যবহার করেন তার উপর নির্ভর করে ভারসাম্যটি পৃথক হয়, যার কোনটি .NET 1.0 এ বিদ্যমান নেই, এটি সি এর প্রথম সংস্করণে অনুমান মূলশব্দ হিসাবে কম দরকারী করে তোলে ♯ আমি কেবল RadioButton
radioButton
কোনও কারখানা বা সহায়ক পদ্ধতির ক্ষেত্রে একটি নাম বলব যেখানে বোতামটি সম্পর্কে একমাত্র তাৎপর্যপূর্ণ বিষয় ছিল এটি ছিল একটি RadioButton
, অন্যথায় বা তার সাথে বা বাইরে পাগলামি var
।
var
হয়েছি, বেশি না হলে, তবে আমি আমার মতামত বদলেছি, এবং সম্ভবত এটি বিভিন্ন মতামতের প্রশ্নের মতই সহজ, কারণ আপনি এখনও বলছেন যে আপনি ভুল হিসাবে এটি একটি আপনি বেনামী অবজেক্টস এবং জেনেরিকগুলি কতটা ব্যবহার করছেন তা বিবেচনা করুন;) প্রকারের ঘোষণাপত্রটি প্রায়শই কেবল কোড শব্দের হয়, যদি আপনি কোডটি না বুঝতে পারেন তবে কোড সম্ভবত উভয় ক্ষেত্রেই অস্পষ্ট।
var
নিজেই কেবল কম্পাইলারকে অ্যাসাইনমেন্ট থেকে প্রকারটি নির্ধারণ করতে বলে; এটা সিনট্যাকটিক চিনি। আমি প্রথমে এটি সম্পর্কে সন্দেহ ছিলাম, তবে আমি এটিকে ধর্মীয়ভাবে ব্যবহার করি এবং এখনও এমন একটি সময়ের মুখোমুখি হতে পারি না যেখানে এটি বিভ্রান্তির কারণ হয়ে দাঁড়ায়। এটি তাত্ক্ষণিকতার সময় অপ্রয়োজনীয়তা সরিয়ে দেয় এবং রেফারেন্স করার সময় প্রকারটি পরীক্ষা করার প্রয়োজনটিকে সরিয়ে দেয়। কোন জাভা সমতুল্য জাভা 9. এর হিসাবে
আপনি আপনার প্রকল্পের Lombok যুক্ত করে থাকেন আপনি তার ব্যবহার করতে পারেন Val শব্দ।
final
সেগুলি অপরিবর্তনীয় নয়। বিবেচনা করুনfinal StringBuilder strB = new StringBuilder("My reference is final"); strB.append("I'm not immutable");
var
। projectlombok.org/features/experimental/var.html
জেইপি - জেডিকে বর্ধন-প্রস্তাব
http://openjdk.java.net/jeps/286
জেপি 286: স্থানীয়-পরিবর্তনশীল প্রকারের অনুক্রম
লেখক ব্রায়ান গোয়েটজ
// Goals:
var list = new ArrayList<String>(); // infers ArrayList<String>
var stream = list.stream(); // infers Stream<String>
আমি ইন্টেলিজিজের জন্য একটি প্লাগিন রান্না করেছি যা - একভাবে - আপনাকে var
জাভাতে দেয় । এটা একটা হ্যাক, তাই স্বাভাবিক দাবি অস্বীকারসমূহ প্রয়োগ, কিন্তু আপনি যদি আপনার জাভা উন্নয়নের জন্য IntelliJ ব্যবহার এবং এটি ব্যবহার করে দেখতে চাই, এটি এর https://bitbucket.org/balpha/varsity ।
20 মার্চ JDK 10 মুক্তির সঙ্গে, জাভা এখন একটি অন্তর্ভুক্ত var
সংরক্ষিত টাইপ নাম (একটি শব্দ দেখুন নিচের নয়) উল্লেখিত JEP 286 । স্থানীয় ভেরিয়েবলের জন্য, নিম্নলিখিতটি এখন জাভা 10 বা উচ্চতরতে বৈধ:
var map = new HashMap<String, Integer>();
var
জাভা সংরক্ষিত টাইপ নামের প্রায় অভিন্ন var
যে উভয় অন্তর্নিহিত টাইপিং জন্য (গুরুত্বপূর্ণ পার্থক্য নিচে দেখুন) অনুমতি দেয় C # শব্দ। var
জাভাতে কেবলমাত্র নিম্নলিখিত প্রসঙ্গগুলিতে অন্তর্নিহিত ধরণের অনুক্রমের জন্য ব্যবহার করা যেতে পারে ( জেপি ২ 28 28: গোলগুলিতে অঙ্কিত হিসাবে ):
সুতরাং ক্ষেত্র, রিটার্নের ধরণ, শ্রেণীর নাম বা ইন্টারফেসের নামের জন্য ব্যবহার করা var
যাবে না । এর যুক্তিটি হ'ল স্থানীয় ভেরিয়েবলগুলি ঘোষণা এবং সংজ্ঞায়িত করার সময় দীর্ঘ প্রকারের নাম অন্তর্ভুক্ত করার প্রয়োজনীয়তা অপসারণ করা, যেমনটি জেইপি 286 (ব্রায়ান গোয়েজ লিখেছেন) এ বর্ণিত :
আমরা জাভা কোড লেখার সাথে সম্পর্কিত অনুষ্ঠানটি হ্রাস করে, স্থির প্রকারের সুরক্ষার জন্য জাভার প্রতিশ্রুতি বজায় রেখে, বিকাশকারীদের স্থানীয় ভেরিয়েবল প্রকারের প্রায়শ-অহেতুক প্রকাশ্য ঘোষণাকে সজ্জিত করার মাধ্যমে বিকাশকারীদের অভিজ্ঞতার উন্নতি করতে চাই।
var
জাভা স্কোপিংএটি লক্ষ করা উচিত যে var
জাভাতে কোনও কীওয়ার্ড নয়, বরং একটি সংরক্ষিত টাইপের নাম। জেপি 286 থেকে উদ্ধৃত হয়েছে:
শনাক্তকারী ভার একটি কীওয়ার্ড নয়; পরিবর্তে এটি একটি সংরক্ষিত প্রকারের নাম। এর অর্থ হ'ল কোড যা ভেরিয়েবল, পদ্ধতি বা প্যাকেজের নাম হিসাবে ভের ব্যবহার করে তা প্রভাবিত হবে না; শ্রেণি বা ইন্টারফেসের নাম হিসাবে ভের ব্যবহার করে এমন কোডগুলি প্রভাবিত হবে (তবে এই নামগুলি বাস্তবে বিরল, যেহেতু তারা সাধারণত নামকরণ কনভেনশন লঙ্ঘন করে)।
মনে রাখবেন যেহেতু var
একটি সংরক্ষিত টাইপের নাম এবং কোনও কীওয়ার্ড নয়, এটি প্যাকেজের নাম, পদ্ধতির নাম এবং পরিবর্তনশীল নামগুলির জন্য (এটির নতুন টাইপ-হস্তক্ষেপের ভূমিকা সহ) ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, var
জাভাতে বৈধ ব্যবহারের সমস্ত উদাহরণ নিম্নলিখিত :
var i = 0;
var var = 1;
for (var i = 0; i < 10; i++) { /* ... */ }
public int var() { return 0; }
package var;
জেপি 286 থেকে উদ্ধৃত হয়েছে:
এই চিকিত্সা স্থানীয় ভেরিয়েবলগুলির সাথে ইনিশিয়ালার্স, বর্ধিত লুপের ইনডেক্স এবং সীমাবদ্ধ থাকবে স্থানীয়দের জন্য traditionalতিহ্যবাহী ফর লুপে; এটি পদ্ধতির আনুষ্ঠানিকতা, নির্মাণকারীর আনুষ্ঠানিকতা, পদ্ধতি রিটার্নের ধরণ, ক্ষেত্রগুলি, ফর্মালগুলি ধরার জন্য, বা অন্য কোনও ধরণের ভেরিয়েবল ঘোষণার জন্য উপলভ্য নয়।
var
জাভা এবং সি এর মধ্যে পার্থক্যএটি var
সি # তে এবং জাভাতে নিম্নলিখিতগুলির মধ্যে একটি উল্লেখযোগ্য পার্থক্য রয়েছে: সি # তে var
টাইপের নাম হিসাবে ব্যবহার করা যেতে পারে তবে জাভাতে শ্রেণীর নাম বা ইন্টারফেসের নাম হিসাবে ব্যবহার করা যায় না। সি # ডকুমেন্টেশন অনুসারে (স্পষ্টভাবে স্থানীয় স্থানীয় ভেরিয়েবলগুলি টাইপ করা হয়েছে) :
যদি নামের কোনও প্রকারের
var
সুযোগ থাকে তবেvar
কীওয়ার্ডটি সেই প্রকারের নামটি সমাধান করবে এবং স্পষ্টত টাইপ করা স্থানীয় পরিবর্তনশীল ঘোষণার অংশ হিসাবে বিবেচিত হবে না।
var
সি # তে টাইপ নাম হিসাবে ব্যবহারের ক্ষমতা কিছু জটিলতা তৈরি করে এবং কিছু জটিল জটিল বিধি প্রবর্তন করে, যা var
জাভাতে var
কোনও শ্রেণি বা ইন্টারফেসের নাম হিসাবে অস্বীকার করে এড়ানো হয় । var
সি # তে টাইপ নামের জটিলতার বিষয়ে তথ্যের জন্য , নিষেধাজ্ঞাগুলি স্পষ্টত-টাইপড ভেরিয়েবল ঘোষণার ক্ষেত্রে প্রযোজ্য দেখুন । জাভাতে `var এর স্কোপিং সিদ্ধান্তের পিছনে যুক্তি সম্পর্কিত আরও তথ্যের জন্য, JEP 286 দেখুন: স্কোপিং পছন্দগুলি ।
var
ক্ষেত্র বা রিটার্নের ধরণের জন্য ব্যবহার করতে পারবেন না ? কেন এটি লক্ষ করা গুরুত্বপূর্ণ?
var
জাভাতে ক্ষেত্র বা রিটার্নের ধরণের জন্য ব্যবহার করা যায় না। এটি গুরুত্বপূর্ণ কারণ এই বিধিনিষেধটি var
প্রাসঙ্গিক-সংবেদনশীল করে তোলে , যেখানে এটি কেবল কিছু প্রসঙ্গে (স্থানীয় ভেরিয়েবল) ব্যবহার করা যেতে পারে অন্যকে নয়। এটি জাভা এবং সি # এর মধ্যে পার্থক্য নয় যে এটি লক্ষ করা উচিত, তবে var
জাভা ব্যবহার করার সময় সাধারণভাবে একটি গুরুত্বপূর্ণ বিধিনিষেধ ।
var
একটি শ্রেণির নাম তৈরি করতে পারেন এবং এটি ব্যবহার করতে পারেন। প্রযুক্তিগতভাবে এটি সি # এর ক্ষেত্রে একটি "প্রসঙ্গের কীওয়ার্ড" তবে জাভাতে মনে হয় আপনি একই কাজটি করতে পারবেন না। আমি ভুল হলে শুধরে.
var
জাভাতে কোনও শ্রেণীর নাম বা ইন্টারফেসের নাম হিসাবে ব্যবহার করতে পারবেন না (যা যাইহোক সাধারণ নয়) তবে আপনি এটি পরিবর্তনশীল নাম, পদ্ধতির নাম এবং প্যাকেজের নামের জন্য ব্যবহার করতে পারেন। উদাহরণস্বরূপ, var var = 1;
একটি বৈধ জাভা বিবৃতি কিন্তু একটি বর্গ ডিক্লেয়ার করার চেষ্টা হয় public class var {}
একটি ত্রুটি মধ্যে ফলাফল: as of release 10, 'var' is a restricted local variable type and cannot be used for type declarations
। আমি var
জাভাতে পিছনে যুক্তি var
এবং সি # এর সাথে এর পার্থক্য সম্পর্কে আরও বিশদ যেতে আরও উপরে উত্তরটি আপডেট করেছি ।
এটি জেডিকে ১০-তে সমর্থিত হবে এটি প্রাথমিক অ্যাক্সেস বিল্ডে এটি কার্যকরভাবে দেখাও সম্ভব ।
JEP 286 :
আরম্ভকারীদের সাথে স্থানীয় ভেরিয়েবলের ঘোষণার ক্ষেত্রে প্রকারের অনুক্রমের প্রসারিত করতে জাভা ভাষা উন্নত করুন।
লেখার পরিবর্তে এখন:
List<> list = new ArrayList<String>();
Stream<> stream = myStream();
তুমি লেখ:
var list = new ArrayList<String>();
var stream = myStream();
মন্তব্য:
var
এখন একটি সংরক্ষিত টাইপের নামআপনি যদি নিজের স্থানীয় সিস্টেমে জাভা ইনস্টল না করেই চেষ্টা করে দেখতে চান তবে আমি এটিতে JDK 10 ইনস্টল করে একটি ডকার চিত্র তৈরি করেছি:
$ docker run -it marounbassam/ubuntu-java10 bash
root@299d86f1c39a:/# jdk-10/bin/jshell
Mar 30, 2018 9:07:07 PM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
| Welcome to JShell -- Version 10
| For an introduction type: /help intro
jshell> var list = new ArrayList<String>();
list ==> []
var
) সমতুল্য নয়। ইন var
উদাহরণস্বরূপ list
ধরনের হয় ArrayList
, না একটি List
।
একটি সহজ সমাধান (ধরে নিই যে আপনি একটি শালীন আইডিই ব্যবহার করছেন) হ'ল সর্বত্র কেবল 'ইন্ট' টাইপ করুন এবং তারপরে এটি আপনার জন্য টাইপ সেট করে নিন।
আমি আসলে 'var' নামক একটি ক্লাস যুক্ত করেছি যাতে আমার আলাদা কিছু টাইপ করতে হবে না।
কোডটি এখনও খুব ভার্জোজ, তবে কমপক্ষে আপনাকে এটি টাইপ করতে হবে না!
int
) - আমি কি কিছু মিস করছি? : (* যখন আমি অন্ধকার একটি শালীন আইডিই কল না হবে, আমি অন্যদের জন্য ফয়সালা করে না ...)
জাভা 10 স্থানীয় ভেরিয়েবল টাইপ অনুমিতি পেয়েছে, সুতরাং এখন এটি var
সি # একের সমান সমান (যতদূর আমি সচেতন)।
এটা তোলে আভাসিত করা অ denotable ধরনের (যা প্রোগ্রামার দ্বারা যে জায়গায় নামে করা যাবে না ধরনের; যদিও এটিও করতে পারেন যা ধরনের হয় অ denotable ভিন্ন)। উদাহরণস্বরূপ এবং বেনামী ক্লাসগুলির সাথে কৌশলগুলিvar
দেখুন (যা আপনার কখনই কাজের সময়ে ব্যবহার করা উচিত নয়) ।
একটি পার্থক্য যা আমি খুঁজে পেতে পারি তা হ'ল সি # তে,
জাভা 10 var
এ কোনও আইনি ধরণের নাম নয়।
জাভা 10 হিসাবে, সমতূল্য ... var
।
আমি জানি এটি আরও পুরানো তবে কেন কোনও ভ্যার ক্লাস তৈরি করা যায় না এবং বিভিন্ন প্রকারের সাথে কনস্ট্রাক্টর তৈরি করা হয় না এবং নির্ভর করে কি কনস্ট্রাক্টররা আহ্বান করে তার উপর নির্ভর করে আপনি বিভিন্ন ধরণের সাথে ভের পাবেন। আপনি এমনকি এক ধরণের অন্য ধরণের রূপান্তর করতে পদ্ধতিগুলি তৈরি করতে পারেন।
Lombok
বিভিন্ন সমর্থন করে তবে এটি পরীক্ষামূলক হিসাবে শ্রেণিবদ্ধ করা হয়েছে:
import lombok.experimental.var;
var number = 1; // Inferred type: int
number = 2; // Legal reassign since var is not final
number = "Hi"; // Compilation error since a string cannot be assigned to an int variable
System.out.println(number);
এটি ব্যবহারের চেষ্টা করার সময় এড়াতে এখানে একটি সমস্যা রয়েছে IntelliJ IDEA
। এটি অটোর সমাপ্তি এবং সমস্ত কিছু সহ প্রত্যাশিত হিসাবে কাজ করে বলে মনে হচ্ছে। কোনও "নন-হ্যাকি" সমাধান না হওয়া পর্যন্ত (যেমন জেপি 286: লোকাল-ভেরিয়েবল টাইপ ইনফারেন্সির কারণে ), এখনই এটি আপনার সেরা বেট হতে পারে।
নোট করুন যা কোনও পাশাপাশি কোনও পরিবর্তন বা তৈরি না val
করে সমর্থন করে ।Lombok
lombok.config
আপনি জাভা 10 এ পারবেন তবে কেবল স্থানীয় ভেরিয়েবলের জন্য, অর্থাত্
আপনি পারেন,
var anum = 10; var aString = "Var";
কিন্তু পারে না,
var anull = null; // Since the type can't be inferred in this case
পরীক্ষা করে দেখুন বৈশিষ্ট আরও তথ্যের জন্য।
var
ক্যাপচারের ধরণ, ছেদ করার ধরণ এবং বেনাম বর্গ ধরণের সহ নন-ডোনোটেবল ধরণের বিভিন্ন ফর্মের জন্য ব্যবহার করা যেতে পারে। এবং জাভা 11 হিসাবে এটি ল্যাম্বডা পরামিতিগুলিতে প্রয়োগ করা যেতে পারে।
সাধারণভাবে আপনি যে কোনও ধরণের জন্য অবজেক্ট ক্লাস ব্যবহার করতে পারেন, তবে আপনার পরে টাইপ কাস্টিং রয়েছে!
উদাহরণ: -
Object object = 12;
Object object1 = "Aditya";
Object object2 = 12.12;
System.out.println(Integer.parseInt(object.toString()) + 2);
System.out.println(object1.toString() + " Kumar");
System.out.println(Double.parseDouble(object2.toString()) + 2.12);
var
ভাষাতে এখন আনুষ্ঠানিকভাবে শব্দটি সহ , আপনার উত্তরটি এখনকার পুরানো কালের পদ্ধতিতেও উল্লেখ করছে।
এই বৈশিষ্ট্যটি এখন জাভা এসই 10 এ উপলব্ধ The স্ট্যাটিক, টাইপ-সেফ ভেরি শেষ পর্যন্ত এটি জাভা বিশ্বে পরিণত করেছে :)
উত্স: https://www.oracle.com/corolve/pressrelease/Java-10-032018.html
val
(বাvar
) আপনি যদি একটি নির্দিষ্ট "জাভা প্রতিস্থাপন" ভাষা ব্যবহার করেন ;-)