আমি কীভাবে জাভা থেকে লংতে রূপান্তর করব?


219

আমি এখানে এবং গুগল লোকদের উভয়দিকেই longযেতে intএবং অন্যভাবে না যেতে সমস্যা বোধ করি । তবুও আমি নিশ্চিত যে আমি এখান থেকে intযাওয়ার আগে এই একমাত্র দৃশ্যের মধ্যে চলে আসিনি Long

আমি খুঁজে পাওয়া কেবলমাত্র অন্য উত্তরগুলি হ'ল "এটি কেবল প্রথম স্থানে দীর্ঘ হিসাবে সেট করুন" যা সত্যই প্রশ্নের সমাধান করে না।

আমি প্রথমে কাস্ট করার চেষ্টা করেছি তবে আমি একটি " Cannot cast from int to Long" পেয়েছি

for (int i = 0; i < myArrayList.size(); ++i ) {
    content = new Content();
    content.setDescription(myArrayList.get(i));
    content.setSequence((Long) i);
    session.save(content);
}

আপনি কল্পনা করতে পারেন যে আমি কিছুটা বিভ্রান্ত হয়ে পড়েছি, আমি কিছু আটকে যাচ্ছি intকারণ যেহেতু কিছু বিষয়বস্তু আসছে ArrayListএবং যে সত্তাটির জন্য আমি এই তথ্যটি সঞ্চয় করছি তার ক্রম সংখ্যাটি দীর্ঘ হিসাবে প্রয়োজন।


(দীর্ঘ i = 0; i <myList.size (); ++ i) খুব বেশি কাজ করে
ইনস্ট্যান্সপ

@ ইনস্ট্যান্সসপ হ্যাঁ এটি লুপটির জন্য কাজ করবে, তবে আমি আমার প্রশ্নের নীচে উল্লেখ করেছি যে
অ্যারেলিস্টের

লম্বা লংভ্যালু = ইনভ্যালু | 0L;
ড্যানিয়েল জিপা

আমি কি করেনি হল: ঢালাই intকরার longপ্রথম, তারপর ধার্য longকরতে Long। উদাহরণস্বরূপint x = 2; Long y = (long)x;
এরিক ওয়াং

উত্তর:


244

নোট করুন যে একটি কাস্ট longএবং টু কাস্টের মধ্যে পার্থক্য রয়েছে Long। আপনি যদি long(একটি আদিম মান) কাস্ট করেন তবে এটি স্বয়ংক্রিয়ভাবে একটিতে Longরেফারেন্স করা উচিত (রেফারেন্স টাইপ যা এটি আবৃত করে)।

আপনি বিকল্প হিসাবে newএকটি উদাহরণ তৈরি করতে ব্যবহার করতে পারেন Long, এটি intমান দিয়ে শুরু করে ।


31
আরউইকার কী বলেছিল তা প্রদর্শনের জন্য আপনি Long.valueOf (i) কল করতে পারেন, এটি একটি দীর্ঘ সময় নেয় তবে একটি প্রসারিত প্রশস্ত করবে এবং আপনাকে একটি দীর্ঘ বস্তু ফিরিয়ে দেবে।
গ্রুন্ডলেফ্লেক

1
অটোবক্সিং পছন্দনীয়, কারণ এটি Longপ্রতিবারই কোনও নতুন অবজেক্ট তৈরি করতে হবে না ।
মাইকেল ম্যাইইয়ার্স

2
(সতর্কতা: এই মন্তব্যের বাকী অংশটি অনুমান করা এবং অনুমান করা) যদি Long.valueOf () প্রদত্ত মানগুলি 0 থেকে 128 এর মধ্যে পড়ে, যা খুব সাধারণ, এবং এটি একটি ক্যাশেড উদাহরণ দেয়, তবে তা কি অটোবক্সিংয়ের চেয়ে বেশি পছন্দনীয় হবে? (আপনি যদি এটির মূল্য মনে করেন তবে আমি একটি নতুন প্রশ্ন জিজ্ঞাসা করতে পারি ...)
গ্রুন্ডলেফ্লেক

4
অটোবক্সিং একই কাজ করে। যাইহোক, এটি -127 থেকে 128 এর মধ্যে
ড্যানিয়েল আর্উইকার 21

6
@ গ্রুন্ডলেফ্লেক: অটোবক্সিং ব্যবহার করে Long.valueOf()(যদি আমি সঠিকভাবে মনে করি), তবে এতে কোনও পার্থক্য হবে না। আমার মন্তব্য আপনার মন্তব্যে নয়, উত্তরের জবাবে ছিল।
মাইকেল ময়র্স

193

নিম্নলিখিত ব্যবহার করুন: Long.valueOf(int);


5
দেখুন, যেহেতু এটি একটি নালপয়েন্টারএক্সেপশন উত্পন্ন করবে যদি আপনি কোনও পূর্ণসংখ্যার অবজেক্ট গ্রহণ করেন যা শূন্য।
will824

2
সঠিক থাকলে আমি ভাবলাম উত্তরটি পুরানো হতে পারে কারণ আমি পদ্ধতিটি খুঁজে পাচ্ছি নাLong.valueOf(int) !!
শরিফ

5
@ উইল 824 - একটি আদিম 'ইন' ভেরিয়েবল বাতিল হতে পারে না।
রোডো

1
@shareef - serg এর মন্তব্য দেখুন - কিন্তু আমি এই পদ্ধতি একটি দীর্ঘ যা একটি দীর্ঘ সঙ্গে autoboxes করার int- এ কাস্ট মনে করি ... তাই অপ্রয়োজনীয় বলে মনে হয়
Rondo

1
@ রনডো একটি ক্যান Integer, যা সে বলেছিল।
মাইরা

17

আপনার যদি ইতিমধ্যে পূর্ণসংখ্যা হিসাবে টাইপ করা থাকে আপনি এটি করতে পারেন:

Integer y = 1;
long x = y.longValue();


6

আমার এই ছোট খেলনা আছে, এটি জেনারিক ইন্টারফেসের সাথেও ডিল করে। আমি ফিড ভুল হলে ক্লাসকাস্টএক্সেপশন নিক্ষেপ করে ঠিক আছে (ঠিক আছে এবং খুশি)

public class TypeUtil {
    public static long castToLong(Object o) {
        Number n = (Number) o;
        return n.longValue();
    }
}


6

কেমন

int myInt = 88;

// সংকলন করবে না

Long myLong = myInt;

// সংকলন করে, এবং অন্তর্নিহিত অ-নুল স্পিরিট ধরে রাখে। সেরা castালাই মোটেও castালাই নয় । অবশ্যই, আপনার ব্যবহারের ক্ষেত্রে দীর্ঘ এবং সম্ভাব্য নূন্যমূল্যের প্রয়োজন হতে পারে। তবে যদি অন্তর্নিহিত, বা অন্যান্য ল্যাংগুলি আপনার একমাত্র ইনপুট হয় এবং আপনার পদ্ধতিটি পরিবর্তন করা যায় তবে আমি এই পদ্ধতির পরামর্শ দেব।

long myLong = myInt;

// সংকলন, সবচেয়ে কার্যকর উপায়, এবং এটি স্পষ্ট করে দেয় যে উত্সের মানটি কখনই NULL হয় না।

Long myLong = (long) myInt;

3

Numberরেফারেন্স ব্যবহার করে আমরা দীর্ঘ মান পাব ।

public static long toLong(Number number){
    return number.longValue();
}

এটি সমস্ত সংখ্যার ধরণের জন্য কাজ করে, এখানে একটি পরীক্ষা দেওয়া হল:

public static void testToLong() throws Exception {
    assertEquals(0l, toLong(0));   // an int
    assertEquals(0l, toLong((short)0)); // a short
    assertEquals(0l, toLong(0l)); // a long
    assertEquals(0l, toLong((long) 0)); // another long
    assertEquals(0l, toLong(0.0f));  // a float
    assertEquals(0l, toLong(0.0));  // a double

}


2

এ নিয়ে আমার অনেক সমস্যা হয়েছিল। আমি শুধু চেয়েছিলেন:

thisBill.IntervalCount = jPaidCountSpinner.getValue();

যেখানে ইন্টারভালকাউন্ট একটি দীর্ঘ, এবং জেএসপিনার একটি দীর্ঘ ফিরিয়ে দিতে প্রস্তুত ছিল। শেষ পর্যন্ত আমাকে এই ফাংশনটি লিখতে হয়েছিল:

    public static final Long getLong(Object obj) throws IllegalArgumentException {
    Long rv;

    if((obj.getClass() == Integer.class) || (obj.getClass() == Long.class) || (obj.getClass() == Double.class)) {
        rv = Long.parseLong(obj.toString());
    }
    else if((obj.getClass() == int.class) || (obj.getClass() == long.class) || (obj.getClass() == double.class)) {
        rv = (Long) obj;
    }
    else if(obj.getClass() == String.class) {
        rv = Long.parseLong(obj.toString());
    }
    else {
        throw new IllegalArgumentException("getLong: type " + obj.getClass() + " = \"" + obj.toString() + "\" unaccounted for");
    }

    return rv;
}

কৌশলটি মনে হয় যা। সাধারণ কাস্টিংয়ের পরিমাণ নেই, উপরের সমাধানগুলির কোনওটিই আমার পক্ষে কাজ করে না। খুবই হতাশাজনক.


1
যদি jPaidCountSpinner.getValue()আসলে কোনও বস্তুটি ফিরে আসে তবে Longঅবশ্যই আপনাকে অবশ্যই (Long)সামনে একটি কাস্ট রাখা দরকার । এছাড়াও আপনার চেক উপর একটি ব্রেকপয়েন্ট নির্বাণ চেষ্টা int.classবা long.classইত্যাদি এটি আগের আঘাত দেয়? এবং যদি আপনার কাছে কোনও সংখ্যার মতো অবজেক্ট থাকে তবে এটি সমর্থন করবে java.util.Number, সুতরাং এটিতে castালাই করুন এবং longValueপদ্ধতিটি কল করুন । সেক্ষেত্রে স্ট্রিংয়ের মধ্য দিয়ে যাওয়ার দরকার নেই। সুতরাং এই ফাংশনটি বেশ কিছুটা সরল করা যায়, এমনকি আপনার যদি স্ট্রিংয়ের সাথেও ডিল করতে হয়। (এখানে সমস্যার অংশ হ'ল এর জন্য খারাপ রেফারেন্স ডকুমেন্টেশন JSpinner)।
ড্যানিয়েল আর্উইকার

1
আমিও এরকম কিছু করে শেষ করেছি। আমি নিশ্চিত নই যে আমি কী ধরণের নম্বর পাব এবং দক্ষতার জন্য সামান্য উদ্বেগ নিয়ে এটিকে লংতে রূপান্তর করতে ইচ্ছুক কিন্তু বয়লারপ্লেট এড়াতে চাইছি।
প্রোফিটরল


0

যত তাড়াতাড়ি শুধুমাত্র পদ্ধতি আছে Long.valueOf(long), থেকে cast ালাই ব্যবহারের ক্ষেত্রে নিখুঁতভাবে সম্পন্ন intকরা longহবে Long.valueOf(intValue)

এটি করার আরও সুস্পষ্ট উপায়

Integer.valueOf(intValue).longValue()

longValueএটি কেবলমাত্র একটি (long), সুতরাং আপনি এখানে "লাভ" কেবলমাত্র Integerঅভ্যন্তরীণ ক্যাশে।
মার্টিন শ্র্রেডার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.