I'm trying to port my Python class to Java on Android, but I'm not sure how to achieve exactly what I want.
I need to create a dictionary-like object which uses a class as a key and contains subclass member methods as values.
In Python I have:
self.convert = { Inch:self.toInch,
Foot:self.toFoot,
Yard:self.toYard,
Mile:self.toMile,
Centimeter:self.toCentimeter,
Meter:self.toMeter,
Kilometer:self.toKilometer}
where Inch is a class name and self.toInch is a method defined in the current object which is a subclass of BaseUnit.
I think I need to use a HashMap in Java, but I can't wrap my head around the types of all these things and so suffer teremendously while searching through a 3 page long error report in a tiny LogCat window that says something like NullPointerException, ClassNotFoundException, YouReallySuckAtJavaException, etc.
Additionally, the magic I found in Python with my Units class is
return self.units[to_unit.getName()](result)which allows me to call the subclass member method for a result, look up a class by name, instantiate it with a parameter (result), and return the instantiated object. How can I do this in Java?
Thanks for any assistance on this exciting task! Android is awesome, but java less so!
Units class
class Units:
units = {"Inch":Inch, "Yard":Yard, "Foot":Foot, "Mile":Mile, "Centimeter":Centimeter, "Meter":Meter, "Kilometer":Kilometer}
def convert(self, from_unit, to_unit):
to_unit_type = to_unit.__type__()
result = from_unit.convert[to_unit_type]()
print "Conversion: {0} {1} is {3} {2}".format(from_unit.getValue(), from_unit.getName(), to_unit.getName(), result)
return self.units[to_unit.getName()](result)
factors.py
#Inches inch_foot = 0.08333333333333333 foot_inch = 12.0 inch_yard = 0.027777777777777776 yard_inch = 36.0 inch_mile = 0.000015782828282828283 mile_inch = 63360.0 inch_centimeter = 2.54 centimeter_inch = 0.39370078740157477 inch_meter = 0.0254 meter_inch = 39.37007874015748 inch_kilometer = 0.0000254 kilometer_inch = 39370.07874015748 #Feet foot_inch = 12.0 inch_foot = 0.08333333333333333 foot_yard = 0.3333333333333333 yard_foot = 3.0 foot_mile = 0.0001893939393939394 mile_foot = 5280.0 foot_centimeter = 30.48 centimeter_foot = 0.03280839895013123 foot_meter = 0.3048 meter_foot = 3.2808398950131234 foot_kilometer = 0.0003048 kilometer_foot = 3280.839895013123 #Yards yard_inch = 36.0 inch_yard = 0.027777777777777776 yard_foot = 3.0 foot_yard = 0.3333333333333333 yard_mile = 0.0005681818181818182 mile_yard = 1760 yard_centimeter = 91.44 centimeter_yard = 0.010936132983377079 yard_meter = 0.9144 meter_yard = 1.0936132983377078 yard_kilometer = 0.0009144 kilometer_yard = 1093.6132983377078 #Miles mile_inch = 63360.0 inch_mile = 0.000015782828282828283 mile_foot = 5280.0 foot_mile = 0.0001893939393939394 mile_yard = 1760.0 yard_mile = 0.0005681818181818182 mile_centimeter = 160934.4 centimeter_mile = 0.00000621371192237334 mile_meter = 1609.344 meter_mile = 0.000621371192237334 mile_kilometer = 1.6093439999999998 kilometer_mile = 0.621371192237334 #Centimeters centimeter_inch = 0.39370078740157477 inch_centimeter = 2.54 centimeter_foot = 0.03280839895013123 foot_centimeter = 30.48 centimeter_yard = 0.010936132983377079 yard_centimeter = 91.44 centimeter_mile = 0.00000621371192237334 mile_centimeter = 160934.4 centimeter_meter = 0.01 meter_centimeter = 100.0 centimeter_kilometer = 0.00001 kilometer_centimeter = 100000.0 #Meters meter_inch = 39.37007874015748 inch_meter = 0.0254 meter_foot = 3.2808398950131234 foot_meter = 0.3048 meter_yard = 1.0936132983377078 yard_meter = 0.9144 meter_mile = 0.0006213711922373339 mile_meter = 1609.344 meter_centimeter = 100.0 centimeter_meter = 0.01 meter_kilometer = 0.001 kilometer_meter = 1000.0 #Kilometers kilometer_inch = 39370.07874015748 inch_kilometer = 0.0000254 kilometer_foot = 3280.839895013123 foot_kilometer = 0.0003048 kilometer_yard = 1093.6132983377078 yard_kilometer = 0.0009144 kilometer_mile = 0.621371192237334 mile_kilometer = 1.609344 kilometer_centimeter = 100000.0 centimeter_kilometer = 0.00001 kilometer_meter = 1000.0 meter_kilometer = 0.001
Unit.py
import factors
class BaseUnit(object):
def __init__(self, value, name):
self.value = value
self.name = name
self.convert = { Inch:self.toInch,
Foot:self.toFoot,
Yard:self.toYard,
Mile:self.toMile,
Centimeter:self.toCentimeter,
Meter:self.toMeter,
Kilometer:self.toKilometer}
def getName(self):
return self.name
def getValue(self):
return self.value
def setValue(self, value=None):
self.value = value
class Inch(BaseUnit):
def __init__(self, value=None):
super(Inch, self).__init__(value, "Inch")
def __type__(self):
return Inch
def toInch(self):
return self.getValue()
def toFoot(self):
return self.getValue()/factors.foot_inch
def toYard(self):
return self.getValue()/factors.yard_inch
def toMile(self):
return self.getValue()/factors.mile_inch
def toCentimeter(self):
return self.getValue()/factors.centimeter_inch
def toMeter(self):
return self.getValue()/factors.meter_inch
def toKilometer(self):
return self.getValue()/factors.kilometer_inch
class Foot(BaseUnit):
def __init__(self, value=None):
super(Foot, self).__init__(value, "Foot")
def __type__(self):
return Foot
def toInch(self):
return self.getValue()/factors.inch_foot
def toFoot(self):
return self.getValue()
def toYard(self):
return self.getValue()/factors.yard_foot
def toMile(self):
return self.getValue()/factors.mile_foot
def toCentimeter(self):
return self.getValue()/factors.centimeter_foot
def toMeter(self):
return self.getValue()/factors.meter_foot
def toKilometer(self):
return self.getValue()/factors.kilometer_foot
class Yard(BaseUnit):
def __init__(self, value=None):
super(Yard, self).__init__(value, "Yard")
def __type__(self):
return Yard
def toInch(self):
return self.getValue()/factors.inch_yard
def toFoot(self):
return self.getValue()/factors.foot_yard
def toYard(self):
return self.getValue()
def toMile(self):
return self.getValue()/factors.mile_yard
def toCentimeter(self):
return self.getValue()/factors.centimeter_yard
def toMeter(self):
return self.getValue()/factors.meter_yard
def toKilometer(self):
return self.getValue()/factors.kilometer_yard
class Mile(BaseUnit):
def __init__(self, value=None):
super(Mile, self).__init__(value, "Mile")
def __type__(self):
return Mile
def toInch(self):
return self.getValue()/factors.inch_mile
def toFoot(self):
return self.getValue()/factors.foot_mile
def toYard(self):
return self.getValue()/factors.yard_mile
def toMile(self):
return self.getValue()
def toCentimeter(self):
return self.getValue()/factors.centimeter_mile
def toMeter(self):
return self.getValue()/factors.meter_mile
def toKilometer(self):
return self.getValue()/factors.kilometer_mile
class Centimeter(BaseUnit):
def __init__(self, value=None):
super(Centimeter, self).__init__(value, "Centimeter")
def __type__(self):
return Centimeter
def toInch(self):
return self.getValue()/factors.inch_centimeter
def toFoot(self):
return self.getValue()/factors.foot_centimeter
def toYard(self):
return self.getValue()/factors.yard_centimeter
def toMile(self):
return self.getValue()/factors.mile_centimeter
def toCentimeter(self):
return self.getValue()
def toMeter(self):
return self.getValue()/factors.meter_centimeter
def toKilometer(self):
return self.getValue()/factors.kilometer_centimeter
class Meter(BaseUnit):
def __init__(self, value=None):
super(Meter, self).__init__(value, "Meter")
def __type__(self):
return Meter
def toInch(self):
return self.getValue()/factors.inch_meter
def toFoot(self):
return self.getValue()/factors.foot_meter
def toYard(self):
return self.getValue()/factors.yard_meter
def toMile(self):
return self.getValue()/factors.mile_meter
def toCentimeter(self):
return self.getValue()/factors.centimeter_meter
def toMeter(self):
return self.getValue()
def toKilometer(self):
return self.getValue()/factors.kilometer_meter
class Kilometer(BaseUnit):
def __init__(self, value=None):
super(Kilometer, self).__init__(value, "Kilometer")
def __type__(self):
return Kilometer
def toInch(self):
return self.getValue()/factors.inch_kilometer
def toFoot(self):
return self.getValue()/factors.foot_kilometer
def toYard(self):
return self.getValue()/factors.yard_kilometer
def toMile(self):
return self.getValue()/factors.mile_kilometer
def toCentimeter(self):
return self.getValue()/factors.centimeter_kilometer
def toMeter(self):
return self.getValue()/factors.meter_kilometer
def toKilometer(self):
return self.getValue()
class Units:
units = {"Inch":Inch, "Yard":Yard, "Foot":Foot, "Mile":Mile, "Centimeter":Centimeter, "Meter":Meter, "Kilometer":Kilometer}
def convert(self, from_unit, to_unit):
to_unit_type = to_unit.__type__()
result = from_unit.convert[to_unit_type]()
print "Conversion: {0} {1} is {3} {2}".format(from_unit.getValue(), from_unit.getName(), to_unit.getName(), result)
return self.units[to_unit.getName()](result)
if __name__ == "__main__":
i = Inch(1)
f = Foot(1)
y = Yard(1)
m = Mile(1)
cm = Centimeter(1)
me = Meter(1)
km = Kilometer(1)
units = Units()
units.convert(i, Yard())
units.convert(y, Inch())
units.convert(f, Inch())
units.convert(f, Yard())
units.convert(m, Inch())
units.convert(m, Foot())
units.convert(m, Yard())
units.convert(km, Inch())
units.convert(cm, Kilometer())
units.convert(km, Mile())
units.convert(m, Meter())
units.convert(i, Kilometer())

New Topic/Question
Reply



MultiQuote






|