简体   繁体   English

Java 1.7。 Function的实现

[英]Java 1.7. implementation of Function

I am using Java 1.7.我正在使用 Java 1.7。 (old I know, but I am working on a legacy application with a lot of dependencies). (老我知道,但我正在开发一个有很多依赖项的遗留应用程序)。

I would like to implement the java.util.function.Function interface in 1.7.我想在 1.7 中实现java.util.function.Function接口。

I have the following so far, but am still getting compile errors:到目前为止,我有以下内容,但仍然出现编译错误:

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);
    }
}

I need to add a constructor to CombiningFunction , but I am not sure how to add it, as I have tried the following:我需要向CombiningFunction添加一个构造函数,但我不确定如何添加它,因为我尝试了以下操作:

 public <V, T, R> CombiningFunction(Function<? super V,? extends T> before, Function<? super T,? super R> after) {     }

but I get more compile errors on the types when I access the constructor.但是当我访问构造函数时,我会在类型上遇到更多编译错误。

Also, the following has errors:此外,以下有错误:

    return new Function<T, T> {
        T apply(T t) { return t; }
    }

Any help with this Function interface would be appreciated.对此Function接口的任何帮助将不胜感激。

Compile Errors:编译错误:

return new CombiningFunction<T, V, R>(before, after);

Expected 0 arguments but found 2预期为 0 arguments 但发现 2

return new CombiningFunction<T, V, R>(before, after);

Expected 0 arguments but found 2预期为 0 arguments 但发现 2

static <T> Function<T, T> identity() {
    return new Function<T, T> {
        T apply(T t) { return t; }
    }
}

'(' or '[' expected ';' expected Cannot resolve symbol 't' Unexpected token '(' 或 '[' 预期 ';' 预期 无法解析符号 't' 意外标记

I would like to use the Function as follows:我想使用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));
    }
}

If you go to the OpenJDK repo you can find the source of the Function class.如果您将 go 转到 OpenJDK 存储库,您可以找到 Function class 的来源。 I am not up to date with available features and classes in Java 7 but I think this should fix some of your issues with Generics我不了解 Java 7 中的可用功能和类的最新信息,但我认为这应该可以解决 Generics 的一些问题

https://github.com/openjdk/jdk/blob/6bab0f539fba8fb441697846347597b4a0ade428/src/java.base/share/classes/java/util/function/Function.java https://github.com/openjdk/jdk/blob/6bab0f539fba8fb441697846347597b4a0ade428/src/java.base/share/classes/java/util/function/Function.Z93F725A07423DFE1C88B339

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Java 1.7。 如何在正则表达式中并排替换两个字符? - Java 1.7. How to replace two characters side by side in a regular expression? Eclipse认为我只有Java 1.6,但是在终端中检查Java版本时会显示1.7。 救命 :) - Eclipse thinks I only have Java 1.6, but when checking java-version in terminal it displays 1.7. Help :) 无法启动Tomcat服务器。 使用Java 1.7进行编译。 使用JSF 2.0。 给出UnsupportedClassVersionError:com / sun / faces / config / FacesInitializer - Unable to start the Tomcat server. Compiled using Java 1.7. Using JSF 2.0. Gives UnsupportedClassVersionError: com/sun/faces/config/FacesInitializer 关于泛型函数的泛型错误语法Java 1.7 - Generics error syntax Java 1.7 on generics function Java 1.7-具有Math.log函数 - Java 1.7 - with Math.log function Java 1.7 varargs函数报告为未经检查的警告 - Java 1.7 varargs function reported as unchecked warning Java Function in 1.7(转换lambda表达式) - Java Function in 1.7 (convert lambda expressions) 连接时Java1.7 TLS1.2实现是否考虑了dNSName(SAN扩展)? - Does Java1.7 TLS1.2 implementation take dNSName (SAN extension) into account when connecting? Java函数的Lambda表达式实现 - Lambda expression implementation of java function Matlab filtfilt() 函数在Java中的实现 - Matlab filtfilt() function implementation in Java
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM