Java语言中怎么在一个类里蕴含不同类型的属性,属性的个数可以不断添加,类型也可以是任意的,但是不许用Object,因为那样类型就转换不过来了。怎么实现?
你是不是报这个错了
看下我的修改 :
代码:
import java.util.HashMap;
import java.util.Map;
public class DynamicAttributes<T> {
private Map<String, T> attributes;
public DynamicAttributes() {
attributes = new HashMap<>();
}
// 添加属性和属性值
public void addAttribute(String attributeName, T value) {
attributes.put(attributeName, value);
}
// 获取属性值
public T getValue(String attributeName) {
return attributes.get(attributeName);
}
public static void main(String[] args) {
DynamicAttributes<Object> objAttributes = new DynamicAttributes<>();
objAttributes.addAttribute("name", "若城");
objAttributes.addAttribute("age", 25);
objAttributes.addAttribute("salary", 999999000.0);
// String name = objAttributes.getValue("name");
String name = (String) objAttributes.getValue("name");
System.out.println("姓名: " + name);
int age = (int) objAttributes.getValue("age");
System.out.println("年龄: " + age);
double salary = (double) objAttributes.getValue("salary");
System.out.println("工资: " + salary);
}
}
1.是谁告诉你Object转不过来的,Object是所有类型的基类,你能放进去就能转回来
2.你也可以自己写个基类,其他类型继承它
如果你需要在一个类中包含不同类型的属性,并且允许属性的个数可以不断添加,并且不使用Object类型,你可以考虑使用泛型和集合类来实现。
一种常见的做法是使用Map集合来存储属性和属性值的对应关系。Map集合可以支持不同类型的值,并且可以动态添加和获取属性。
下面是一个示例代码,展示了如何使用Map集合来实现该需求:
import java.util.HashMap;
import java.util.Map;
public class Attributes {
private Map<String, Object> attributes = new HashMap<>();
public <T> void setAttribute(String name, T value) {
attributes.put(name, value);
}
public <T> T getAttribute(String name) {
return (T) attributes.get(name);
}
public static void main(String[] args) {
Attributes attrs = new Attributes();
attrs.setAttribute("name", "John");
attrs.setAttribute("age", 25);
String name = attrs.getAttribute("name");
Integer age = attrs.getAttribute("age");
System.out.println("Name: " + name);
System.out.println("Age: " + age);
}
}
在以上示例中,通过setAttribute
方法可以将属性名和对应的属性值添加到Map集合中。通过getAttribute
方法可以根据属性名获取属性值,并使用泛型进行类型转换。
需要注意的是,由于使用了泛型,需要在使用时确保属性值与属性类型的匹配,否则可能会引发类型转换异常。
不知道你这个问题是否已经解决, 如果还没有解决的话:计算分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前 20 项之和
结果演示
代码演示
package com.zsh;
import java.util.Scanner;
public class qiuhe {
public static Scanner input = new Scanner(System.in);
public static void main(String[] args){
int x = 2, y = 1;
double sum = 0;
for(int i=0;i<=20;i++){
sum = sum + (double)x/y;
x = x ^ y;
y = x ^ y;
x = x ^ y;
x = x + y;
}
System.out.println("前二十项相加之和为:"+sum);
}
}
深入Java,逻辑练习,获取更多关注我哟!!!
解决方案:
根据问题描述,我可以给出一个实现该需求的解决方案。以下是具体步骤:
创建一个类,例如"DynamicProperties",该类可以包含各种不同类型的属性。
在"DynamicProperties"类中,使用存储不同属性的数据结构,例如HashMap或LinkedHashMap。
创建一个方法,例如"addProperty",用于动态添加属性。该方法应该接受两个参数:属性名称和属性值。在方法内部,将属性名称作为键,属性值作为值,存储到数据结构中。
创建一个方法,例如"getProperty",用于获取属性。该方法应该接受一个参数:属性名称,并返回对应的属性值。在方法内部,根据属性名称从数据结构中获取对应的属性值,并返回。
在"DynamicProperties"类中,根据实际需要,可以添加其他方法,例如"removeProperty"用于删除属性,"getAllProperties"用于获取所有属性等。
在代码中使用"DynamicProperties"类添加、获取、删除属性,并进行相应的测试。
以下是一个示例代码:
import java.util.HashMap;
import java.util.Map;
public class DynamicProperties {
private Map<String, Object> properties;
public DynamicProperties() {
properties = new HashMap<>();
}
public void addProperty(String name, Object value) {
properties.put(name, value);
}
public Object getProperty(String name) {
return properties.get(name);
}
public void removeProperty(String name) {
properties.remove(name);
}
public Map<String, Object> getAllProperties() {
return properties;
}
public static void main(String[] args) {
DynamicProperties dynamicProperties = new DynamicProperties();
// 添加属性
dynamicProperties.addProperty("name", "John");
dynamicProperties.addProperty("age", 25);
dynamicProperties.addProperty("isStudent", true);
// 获取属性
String name = (String) dynamicProperties.getProperty("name");
int age = (int) dynamicProperties.getProperty("age");
boolean isStudent = (boolean) dynamicProperties.getProperty("isStudent");
System.out.println("name: " + name);
System.out.println("age: " + age);
System.out.println("isStudent: " + isStudent);
// 删除属性
dynamicProperties.removeProperty("age");
// 获取所有属性
Map<String, Object> allProperties = dynamicProperties.getAllProperties();
System.out.println("allProperties: " + allProperties);
}
}
请注意,由于该类可以包含各种不同类型的属性,因此在使用getProperty时,需要进行正确的强制类型转换。另外,对于不同类型的属性,可以根据实际需要进行相应的处理。