आबंटन को जिओलोकेशन के प्रकार के आबंटन के साथ आबंटित करना चाहिए


109

मुझे यह त्रुटि मिल रही है-

किसी भी प्रकार के जियोलोकेशन का कोई उदाहरण उपलब्ध नहीं है। आबंटन को जिओलोकेशन के प्रकार के उदाहरण के साथ आबंटित करने के लिए योग्य होना चाहिए (उदाहरण के लिए A (जहाँ x जियोलोकेशन का एक उदाहरण है)। यह त्रुटि नए थ्रेडकट (i) पर आ रही है । मुझे नहीं पता कि ऐसा क्यों हो रहा है। कोई भी सुझाव प्रशंसनीय होगा।

public class GeoLocation {
    public static void main(String[] args) throws InterruptedException {
        int size = 10;

        // create thread pool with given size
        ExecutorService service = Executors.newFixedThreadPool(size); 

        // queue some tasks
        for(int i = 0; i < 3 * size; i++) {
            service.submit(new ThreadTask(i));
        }

        // wait for termination        
        service.shutdown();
        service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS); 
    }

    class ThreadTask implements Runnable {
        private int id;

        public ThreadTask(int id) {
            this.id = id;
        }

        public void run() {
            System.out.println("I am task " + id);
        }
    }

}

2
इस उत्तर को देखें: stackoverflow.com/questions/633585/…
hmjd

जवाबों:


150

नमस्ते मैं इस के लिए एक समाधान मिला ;-)

यह त्रुटि इसलिए होती है क्योंकि आप service.submit(new ThreadTask(i)); मुख्य वर्ग का उदाहरण बनाए बिना एक आंतरिक वर्ग का उदाहरण बनाने की कोशिश कर रहे हैं ।

इस समस्या को हल करने के लिए पहले मुख्य वर्ग का उदाहरण बनाएं:

GeoLocation outer = new GeoLocation();

फिर निम्नानुसार कॉल करने के लिए इच्छित वर्ग का उदाहरण बनाएं:

service.submit(outer.new ThreadTask(i));

मुझे उम्मीद है कि यह आपके मुद्दे को हल करेगा ;-)


101

एक अन्य विकल्प, और एक जिसे मैं पसंद करता हूं, वह होगा कि आंतरिक वर्ग स्थिर हो।

public static class ThreadTask implements Runnable { ... }

मेरे लिए भी पूरी तरह से काम किया। मुझे लगता है कि यह पसंदीदा समाधान होना चाहिए क्योंकि 1) यह सबसे सरल और 2 है) मुख्य विधि स्थिर है।
एलन

15

इनलाइन क्लास करें static

public class OuterClass {

    static class InnerClass {
    }

    public InnerClass instance = new OuterClass.InnerClass();
}

तब आप निम्न प्रकार से भीतर के वर्ग को त्वरित कर सकते हैं:

new OuterClass.InnerClass();

3

यह संरचना करें:

फ़ाइल GeoLocation.java

public class GeoLocation {

    public static void main(String[] args) throws InterruptedException {

        int size = 10;

        // create thread pool with given size
        ExecutorService service = Executors.newFixedThreadPool(size); 

        // queue some tasks
        for(int i = 0; i < 3 * size; i++) {
            service.submit(new ThreadTask(i));
        }

        // wait for termination        
        service.shutdown();
        service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS); 
    }

}

फ़ाइल ThreadTask.java

public class ThreadTask implements Runnable {
    private int id;

    public ThreadTask(int id) {
        this.id = id;
    }

    public void run() {
        System.out.println("I am task " + id);
    }
}

4
SO पर आपका स्वागत है, यहाँ, यह समझाने के लिए एक अच्छा अभ्यास है कि अपने समाधान का उपयोग क्यों करें और न कि कैसे। यह आपके उत्तर को अधिक मूल्यवान बना देगा और आगे के पाठक को यह समझने में मदद करेगा कि आप इसे कैसे करते हैं। मैं यह भी सुझाव है कि आप हमारे FAQ पर एक नजर है: stackoverflow.com/faq
फोर्समैजिक

2

अपनी आंतरिक कक्षाओं के उदाहरण बनाने के लिए आपको मूल वर्ग का एक उदाहरण बनाने की आवश्यकता है। यहाँ एक उदाहरण है:

package RandomTests;

public class FinalConstructorTest {


    public static void main (String [] arg){
        FinalConstructorTest fct= new FinalConstructorTest();
        InnerClass1 f1= fct.new InnerClass1(99);
        InnerClass2 f2= fct.new InnerClass2();
    }

    class InnerClass1{
        private final int num2;

        protected InnerClass1(int num){
            num2= num;
            System.out.println("num2= "+ num2);
        }
    }
    class InnerClass2{
        //private static final int x; //Doesn't work
        private final int y; 

        {
            y= 5;
            System.out.println("y= "+ y);
        }
    }
}

1

यह तब भी हो सकता है जब आप गैर-स्थैतिक सदस्यों को स्थैतिक तरीकों से एक्सेस कर रहे हों या इसी तरह। निम्नलिखित दो अलग-अलग पहलू हैं, एक जो त्रुटि और अन्य हल किए गए कोड का कारण बनता है। यह सिर्फ कक्षा "स्थिर" के रूप में अन्य बनाने की बात है

package Stack;

import java.util.Stack;
import java.util.*;

public class StackArrList {

    public static void main(String[] args) {


        Scanner in = new Scanner(System.in);

        Stack S = new Stack();
        System.out.println("Enter some integers and keep 0 at last:\n");
        int n = in.nextInt();

        while (n != 0) {
            S.push(n);
            n = in.nextInt();
        }
        System.out.println("Numbers in reverse order:\n");

        while (!S.empty()) {

            System.out.printf("%d", S.pop());
            System.out.println("\n");

        }

    }

    public class Stack {
        final static int MaxStack = 100;
        final static int Value = -999999;
        int top = -1;
        int[] ST = new int[MaxStack];

        public boolean empty() {
            return top == -1;
        }

        public int pop() {

            if (this.empty()) {
                return Value;
            }
            int hold = ST[top];
            top--;
            return hold;
        }

        public void push(int n) {
            if (top == MaxStack - 1) {
                System.out.println("\n Stack Overflow\n");
                System.exit(1);
            }
            top++;
            ST[top] = n;

        }

    }

}

यह त्रुटि फेंकता है StackArrList प्रकार का कोई एन्कोडिंग उदाहरण उपलब्ध नहीं है। StackArrList (egxnew A () जहाँ x StackArrList का एक उदाहरण है) के संलग्न उदाहरण के साथ आवंटन को योग्य होना चाहिए। और स्टैक वर्ग का उदाहरण बनाने की अनुमति नहीं देगा

जब आप बनाने के वर्ग ढेर करने के लिए स्थिर वर्ग ढेर से कार्य करेंगे और कोई त्रुटि नहीं होगा।

package Stack;

import java.util.Stack;
import java.util.*;

public class StackArrList {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        Stack S = new Stack();
        System.out.println("Enter some integers and keep 0 at last:\n");
        int n = in.nextInt();

        while (n != 0) {
            S.push(n);
            n = in.nextInt();
        }
        System.out.println("Numbers in reverse order:\n");

        while (!S.empty()) {

            System.out.printf("%d", S.pop());
            System.out.println("\n");

        }

    }

    static class Stack {
        final static int MaxStack = 100;
        final static int Value = -999999;
        int top = -1;
        int[] ST = new int[MaxStack];

        public boolean empty() {
            return top == -1;
        }

        public int pop() {

            if (this.empty()) {
                return Value;
            }
            int hold = ST[top];
            top--;
            return hold;
        }

        public void push(int n) {
            if (top == MaxStack - 1) {
                System.out.println("\n Stack Overflow\n");
                System.exit(1);
            }
            top++;
            ST[top] = n;

        }

    }

}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.