Java 更通用的返回
查看一些代码清理,我想知道处理此问题的最佳方法: 拥有一个包含一些私有变量的类,如:Java 更通用的返回,java,generics,Java,Generics,查看一些代码清理,我想知道处理此问题的最佳方法: 拥有一个包含一些私有变量的类,如: myBool1, myBool2, myBool3 myInt1, myInt2, myInt3 myString1, myString2, myString3 执行对返回值通用的getter函数的最佳方法是什么?所以如果我打电话给getter,比如: myNewBool=<blah>.get("myBool1") myNewString=<blah>.get("myString2")
myBool1, myBool2, myBool3
myInt1, myInt2, myInt3
myString1, myString2, myString3
执行对返回值通用的getter函数的最佳方法是什么?所以如果我打电话给getter,比如:
myNewBool=<blah>.get("myBool1")
myNewString=<blah>.get("myString2")
myNewInt=<blah>.get("myInt3")
myNewBool=.get(“myBool1”)
myNewString=.get(“myString2”)
myNewInt=.get(“myInt3”)
有人有什么建议吗 如果你不知道你想要得到什么,你就不可能真正拥有一个通用的getter,例如:
boolean myNewBool= get("myString1");
如果get
返回一些东西,但您不知道这些东西是否与布尔值兼容,那么可能会发生可怕的事情
你可以试试这个:
public <T> get(String element){
return (T) elementToGet;
}
public get(字符串元素){
返回(T)元素集合;
}
但是,在调用get方法时,必须指定返回类型
String element = myObject.<String>get("element");
String元素=myObject.get(“元素”);
以下是不好的一面:
- 不能直接使用基本体
- 你可以有很多ClassCastException
- 如果您拼错了一个属性名,则在运行它之前,您不会看到它
- 如果您不公开一个好的公共API,人们就必须知道所有可能的属性才能使用它,如上所述,拼写错误的属性(或不精确的属性)直到运行时才会被看到
- 您必须知道返回时间,并在每次使用方法时键入它
- 您必须在
方法中键入一个很长(而且很难闻)的代码来使用每个可能的属性(如果您仍然希望有一些私有的且不可访问的属性),或者更糟糕的是,使用反射来查找正确的属性get
资源:
boolean myNewBool= get("myString1");
如果get
返回一些东西,但您不知道这些东西是否与布尔值兼容,那么可能会发生可怕的事情
你可以试试这个:
public <T> get(String element){
return (T) elementToGet;
}
public get(字符串元素){
返回(T)元素集合;
}
但是,在调用get方法时,必须指定返回类型
String element = myObject.<String>get("element");
String元素=myObject.get(“元素”);
以下是不好的一面:
- 不能直接使用基本体
- 你可以有很多ClassCastException
- 如果您拼错了一个属性名,则在运行它之前,您不会看到它
- 如果您不公开一个好的公共API,人们就必须知道所有可能的属性才能使用它,如上所述,拼写错误的属性(或不精确的属性)直到运行时才会被看到
- 您必须知道返回时间,并在每次使用方法时键入它
- 您必须在
方法中键入一个很长(而且很难闻)的代码来使用每个可能的属性(如果您仍然希望有一些私有的且不可访问的属性),或者更糟糕的是,使用反射来查找正确的属性get
资源:
- 一种方法而不是多种方法
- 对类的用户来说不直观(经典的getter更常见)
- 不能有只因返回类型不同而不同的重载,因此必须有getBool、getInt等方法
- 它更慢-你必须传递字符串,检查有效性,在地图中查找
- 一种方法而不是多种方法
- 对类的用户来说不直观(经典的getter更常见)
- 不能有只因返回类型不同而不同的重载,因此必须有getBool、getInt等方法
- 它更慢-你必须传递字符串,检查有效性,在地图中查找
这真是个糟糕的主意。我不知道为什么为每个私有变量创建一个getter/setter是个问题,但是传递映射到变量符号名的字符串将很难维护和混淆。你不需要这是通用的;每个变量都代表不同的数量,应该这样访问它们。这真是一个糟糕的想法。我不知道为什么为每个私有变量创建一个getter/setter是个问题,但是传递映射到变量符号名的字符串将很难维护和混淆。你不需要这是通用的;每个变量代表一个不同的数量,应该这样访问它们。首先,您应该询问这种解决方案的利弊 优点:
要回答您的实际问题,您可以使用name属性映射创建一个HashMap。或者,您可以使用Java反射来访问属性。第二种解决方案更一般,但也更难编写。首先,你应该问这样一种解决方案的优缺点是什么 优点: