簡體   English   中英

java generic String to <T> 解析器

[英]java generic String to <T> parser

是否有直接的方法來實現具有以下簽名的方法? 至少,實現需要處理原始類型(例如Double和Integer)。 非原始類型將是一個很好的獎金。

//Attempt to instantiate an object of type T from the given input string
//Return a default value if parsing fails   
static <T> T fromString(String input, T defaultValue)

對於實現FromString接口(或等效的)的對象,實現將是微不足道的,但我還沒有找到任何這樣的東西。 我還沒有找到使用反射的功能實現。

只有將Class<T>作為另一個參數提供時才有可能。 T本身不包含有關所需返回類型的任何信息。

static <T> T fromString(String input, Class<T> type, T defaultValue)

然后您可以按type 這篇博客文章中可以找到一個具體的例子。

您需要一個以特定方式解析特定類型的對象。 顯然,不可能確定如何從類型中解析任意類型。 此外,您可能希望控制解析的完成方式。 例如,數字中的逗號是否正常。 是否應修剪空白?

interface Parser<T> {
    T fromString(String str, T dftl);
}

在Java SE 8中,單個抽象方法類型應該不那么冗長。

也許沒有回答如何實現解決方案的問題,但是有一個庫可以做到這一點(即具有與請求幾乎相同的API)。 它被稱為類型解析器 ,可以使用這樣的東西:

TypeParser parser = TypeParser.newBuilder().build();

Integer i = parser.parse("1", Integer.class);
int i2 = parser.parse("42", int.class);
File f = parser.parse("/some/path", File.class);

Set<Integer> setOfInts = parser.parse("1,2,3,4", new GenericType<Set<Integer>>() {});
List<Boolean> listOfBooleans = parser.parse("true, false", new GenericType<List<Boolean>>() {});
float[] arrayOfFloat = parser.parse("1.3, .4, 3.56", float[].class);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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