更通用的回报

pn1*_*ude 1 java generics

看一些代码清理,我想知道处理这个问题的最佳方法:

有一个类有一些私有变量,如:

myBool1, myBool2, myBool3
myInt1, myInt2, myInt3
myString1, myString2, myString3
Run Code Online (Sandbox Code Playgroud)

执行返回值通用的getter函数的最佳方法是什么?所以,如果我用以下内容调用getter:

myNewBool=<blah>.get("myBool1")
myNewString=<blah>.get("myString2")
myNewInt=<blah>.get("myInt3") 
Run Code Online (Sandbox Code Playgroud)

有人有什么建议吗?

Col*_*ert 6

如果你不知道自己想要什么,你就不可能有一个通用的getter,例如:

boolean myNewBool= get("myString1");
Run Code Online (Sandbox Code Playgroud)

如果get返回一些东西,但你真的不知道这个东西是否与布尔值兼容,并且可能会发生可怕的事情.

你可以试试这个:

public <T> get(String element){
    return (T) elementToGet;
}
Run Code Online (Sandbox Code Playgroud)

但是在调用get方法时必须指定返回类型.

String element = myObject.<String>get("element");
Run Code Online (Sandbox Code Playgroud)

以下是坏的方面:

  • 您无法直接使用基元
  • 你可以有很多ClassCastException
  • 如果拼错属性名称,则在运行之前不会看到它
  • 你没有公开一个漂亮的公共API,人们必须知道evert可能的属性才能使用它,并且如上所述,在运行时之前不会看到拼写错误的属性(或不相符的属性).
  • 您必须知道返回时间并在每次使用方法时键入它
  • 您必须在方法中键入一个非常长(并且有臭味)的代码,get要么使用每个可能的属性(如果您仍然想要一些私有且无法访问),或者更糟糕的是,使用反射来查找正确的属性.

所以绝对不是一个好主意.

您可以做的是使用好的旧getter // setter,如果有很多,请使用IDE生成它们.

另一种方法是使用项目lombok.


资源:

在同一主题上: