[英]Casting a String to another type as a parameter of a method in JAVA reflection
我試圖通過 Java 中的反射將值傳遞給方法。
也就是說,我說我們有字符串
String value = (some string representation of a value of type Type);
比如說,我們有一個 class 沒有參數構造器,一個單一的字段int field
和一個單一的方法,一個 setter 方法setTheField
:
public class SomeClass{
private SomeType field;
SomeClass(){};
public void setTheField(SomeType parameter){
this.field = parameter
}
}
如果我接受二傳手(比如說):
Method setter = SomeClass.getClass().getDeclaredMethods()[0];
然后找出它的參數(比如說):
parametersList = Arrays.stream(setter.getParameters())
.collect(Collectors.toList());
然后如果檢查設置器是否需要單個參數:
if (parametersList.size() != 1) {
throw new IllegalArgumentException("Setter named = " +
setter.getName() +
" is not a single parameter setter!");
}
那么我真正想做的是將string
傳遞給一些 object SomeClass object = new SomeClass();
作為setter.invoke(object, value);
我需要以某種方式將String value
轉換為Type
,但我不知道該怎么做。
不過,這似乎是一種標准情況,我希望Java
中比我更開明的人可以快速弄清楚該怎么做。
歡迎任何建議。
如果沒有更多上下文,這看起來像是一個設計問題。 為什么 go 通過反射獲取一個 setter 並給定一個String
,得到一個與 setter 參數類型兼容的值? 如果沒有其他方法可以解決此問題,則不可能僅將String
轉換為其他類型。 一種可能性是制造工廠 class。
假設:setter 的參數類型是一些稱為MyType
的 class 。
class ArgumentFactory {
MyType valueFor(String in) {
// based on the string's value, put the conversion logic here
if (in == null || in.isEmpty()) {
return new MyType();
}
// add other cases as necessary ...
}
}
然后你有
ArgumentFactory factory = new ArgumentFactory();
// ...
String value = "qwerty";
setter.invoke(object, argumentFactory.valueFor(value));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.