/ / जावा जेनेरिक और संख्याओं को एक साथ जोड़ना - जावा, जेनरिक

जावा जेनेरिक और संख्याओं को एक साथ जोड़ना - जावा, जेनरिक

मैं जावा में उदारतापूर्वक संख्याएँ जोड़ना चाहूंगा। मैं मुश्किल में चल रहा हूं क्योंकि नंबर वर्ग वास्तव में उस चीज का समर्थन नहीं करता जो मैं करना चाहता हूं। मैंने क्या किया है अब तक यह है:

public class Summer<E extends Number> {


public E sumValue(List<E> objectsToSum) {
E total = (E) new Object();
for (E number : objectsToSum){
total += number;
}
return null;

}

जाहिर है कि यह काम नहीं करेगा। मैं इस कोड को सही करने के बारे में कैसे जा सकता हूं ताकि मुझे इसकी सूची दी जा सके <int> या <long> या जो कुछ भी और राशि वापस?

उत्तर:

उत्तर № 1 के लिए 11

सामान्य रूप से राशि की गणना करने के लिए, आपको दो कार्य करने होंगे:

  • शून्य वस्तुओं को योग करने का एक तरीका
  • दो वस्तुओं का योग करने का एक तरीका

जावा में, आप इसे एक इंटरफेस के माध्यम से करते हैं। यहाँ एक पूर्ण उदाहरण है:

import java.util.*;

interface adder<T extends Number> {
T zero(); // Adding zero items
T add(T lhs, T rhs); // Adding two items
}

class CalcSum<T extends Number> {
// This is your method; it takes an adder now
public T sumValue(List<T> list, adder<T> adder) {
T total = adder.zero();
for (T n : list){
total = adder.add(total, n);
}
return total;
}
}

public class sum {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(4);
list.add(8);
CalcSum<Integer> calc = new CalcSum<Integer>();
// This is how you supply an implementation for integers
// through an anonymous implementation of an interface:
Integer total = calc.sumValue(list, new adder<Integer>() {
public Integer add(Integer a, Integer b) {
return a+b;
}
public Integer zero() {
return 0;
}
});
System.out.println(total);
}
}

जवाब के लिए 3 № 2

जैसा कि संख्या वर्ग के लिए इंटरफ़ेस को उजागर नहीं करता हैगणना करना, इस समस्या को हल करने का एकमात्र तरीका कक्षाएं बनाना है जो प्रत्येक समर्थित संख्यात्मक प्रकार के लिए आवश्यक संचालन को एन्क्रिप्ट करता है। अपनी कक्षा में आपको विशिष्ट प्रकार का उपयोग करने की आवश्यकता होगी।


उत्तर № 3 के लिए 1

संख्या "किसी भी ऑपरेशन का समर्थन नहीं करती है ताकि आपको आवश्यक प्रकारों के लिए मानों को डालना पड़े। उदाहरण के लिए यदि संख्या एक BigDecimal है, तो नहीं += ऑपरेटर।


उत्तर के लिए 1 № 4

संख्या में intValue (), floatValue (), doubleValue (), longValue, और shortValue () हैं। एक चुनें और इसका उपयोग करें। उदाहरण के लिए,

double total;
total += number.doubleValue();

return total;

इसके अलावा, जावा जेनेरिक सी ++ टेम्प्लेट के समकक्ष नहीं हैं। आप एक जावा जेनेरिक प्रकार के नए उदाहरण आवंटित नहीं कर सकते। यह कभी काम नहीं कर सकता:

E hoot = (E) new Object();

आखिरकार, long, short, int, double, तथा float वर्ग प्रकार नहीं हैं; वे आदिम प्रकार हैं। जैसे कि वे जावा जेनरिक के साथ उपयोग के लिए उपलब्ध नहीं हैं।


जवाब के लिए 0 № 5

आपको रनटाइम प्रकार (उदाहरण का उपयोग करना) की जांच करनी चाहिए instanceof) और ज्ञात प्रकार के लिए डाली और उचित अतिरिक्त संचालन करते हैं। यह निश्चित नहीं है कि परिणाम किस प्रकार का होगा, इस बात को ध्यान में रखते हुए कि सूची में विभिन्न प्रकार के बहुत सारे प्रकार हो सकते हैं।