![](/img/trans.png)
[英]Java 1.7. How to replace two characters side by side in a regular expression?
[英]Java 1.7. implementation of Function
我正在使用 Java 1.7。 (老我知道,但我正在开发一个有很多依赖项的遗留应用程序)。
我想在 1.7 中实现java.util.function.Function
接口。
到目前为止,我有以下内容,但仍然出现编译错误:
public interface Function<T, R> {
R apply(T t);
public static <T, V, R> Function<V, R> compose(Function<? super V, ? extends T> before, Function<? super T, ? super R> after) {
return new CombiningFunction<T, V, R>(before, after);
}
public static <T, R, V> Function<T, V> andThen(Function<? super T, ? super R> before, Function<? super R, ? extends V> after) {
return new CombiningFunction<T, V, R>(before, after);
}
static <T> Function<T, T> identity() {
return new Function<T, T> {
T apply(T t) { return t; }
}
}
}
class CombiningFunction<T, V, R> implements Function<T, R> {
Function<T, V> first;
Function<V, R> second;
public R apply(T t) {
V intermediate = first.apply(t);
return second.apply(intermediate);
}
}
我需要向CombiningFunction
添加一个构造函数,但我不确定如何添加它,因为我尝试了以下操作:
public <V, T, R> CombiningFunction(Function<? super V,? extends T> before, Function<? super T,? super R> after) { }
但是当我访问构造函数时,我会在类型上遇到更多编译错误。
此外,以下有错误:
return new Function<T, T> {
T apply(T t) { return t; }
}
对此Function
接口的任何帮助将不胜感激。
编译错误:
return new CombiningFunction<T, V, R>(before, after);
预期为 0 arguments 但发现 2
return new CombiningFunction<T, V, R>(before, after);
预期为 0 arguments 但发现 2
static <T> Function<T, T> identity() {
return new Function<T, T> {
T apply(T t) { return t; }
}
}
'(' 或 '[' 预期 ';' 预期 无法解析符号 't' 意外标记
我想使用Function
如下:
/**
* Creates Jwt token and other util methods.
*/
public class JwtTokenUtil {
private String SECRET_KEY = "secret-876123";
public String extractUserName(String token) {
return extractClaim(token, new Function<Claims, String>() {
@Override
public String apply(Claims claims) {
return claims.getSubject();
}
});
}
public Date extractExpiration(String token) {
return extractClaim(token, new Function<Claims, Date>() {
@Override
public Date apply(Claims claims) {
return claims.getExpiration();
}
});
}
public <T> T extractClaim(String token, Function<Claims, T> claimsResolver) {
final Claims claims = extractAllClaims(token);
return claimsResolver.apply(claims);
}
private Claims extractAllClaims(String token) {
return Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody();
}
private Boolean isTokenExpired(String token) {
return extractExpiration(token).before(new Date());
}
/**
* Pass in user details, and get a Jwt
* @param userDetails
* @return
*/
public String generateToken(UserDetails userDetails) {
Map<String,Object> claims = new HashMap<>();
return createToken(claims, userDetails.getUsername());
}
private String createToken(Map<String,Object> claims, String subject) {
return Jwts.builder().setClaims(claims).setSubject(subject).setIssuedAt(new Date(System.currentTimeMillis()))
.setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 10)) // 10 hrs
.signWith(SignatureAlgorithm.HS256, SECRET_KEY).compact();
}
public Boolean validteToken(String token, UserDetails userDetails) {
final String username = extractUserName(token);
return (username.equals(userDetails.getUsername()) && !isTokenExpired(token));
}
}
如果您将 go 转到 OpenJDK 存储库,您可以找到 Function class 的来源。 我不了解 Java 7 中的可用功能和类的最新信息,但我认为这应该可以解决 Generics 的一些问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.