簡體   English   中英

將字符串轉換為另一種類型作為 JAVA 反射中的方法的參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM