Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据固定参考验证参数_Java_Validation_Parameters - Fatal编程技术网

Java 根据固定参考验证参数

Java 根据固定参考验证参数,java,validation,parameters,Java,Validation,Parameters,以下方法用于设置FTP连接的传输类型。基本上,我想验证字符输入(参见注释) 这是不是太过分了?有没有更优雅的方法?一般来说,如何进行参数验证?欢迎提出任何意见 public void setTransferType(Character typeCharacter, Character optionalSecondCharacter) throws NumberFormatException, IOException { // http://www.nsf

以下方法用于设置FTP连接的传输类型。基本上,我想验证字符输入(参见注释)

这是不是太过分了?有没有更优雅的方法?一般来说,如何进行参数验证?欢迎提出任何意见

public void setTransferType(Character typeCharacter,
        Character optionalSecondCharacter) throws NumberFormatException,
        IOException {

    // http://www.nsftools.com/tips/RawFTP.htm#TYPE
    // Syntax: TYPE type-character [second-type-character]
    //
    // Sets the type of file to be transferred. type-character can be any
    // of:
    //
    // * A - ASCII text
    // * E - EBCDIC text
    // * I - image (binary data)
    // * L - local format
    //
    // For A and E, the second-type-character specifies how the text should
    // be interpreted. It can be:
    //
    // * N - Non-print (not destined for printing). This is the default if
    // second-type-character is omitted.
    // * T - Telnet format control (<CR>, <FF>, etc.)
    // * C - ASA Carriage Control
    //
    // For L, the second-type-character specifies the number of bits per
    // byte on the local system, and may not be omitted.

    final Set<Character> acceptedTypeCharacters = new HashSet<Character>(Arrays.asList(
            new Character[] {'A','E','I','L'}
    ));

    final Set<Character> acceptedOptionalSecondCharacters = new HashSet<Character>(Arrays.asList(
            new Character[] {'N','T','C'}
    ));

    if( acceptedTypeCharacters.contains(typeCharacter) ) {
        if( new Character('A').equals( typeCharacter ) || new Character('E').equals( typeCharacter ) ){
            if( acceptedOptionalSecondCharacters.contains(optionalSecondCharacter) ) {
                executeCommand("TYPE " + typeCharacter + " " + optionalSecondCharacter );
            }
        } else {
            executeCommand("TYPE " + typeCharacter );
        }
    }
}
public void setTransferType(字符类型字符,
字符选项SecondCharacter)引发NumberFormatException,
IOException{
// http://www.nsftools.com/tips/RawFTP.htm#TYPE
//语法:类型字符[第二类型字符]
//
//设置要传输的文件类型。类型字符可以是任意字符
//其中:
//
//*A-ASCII文本
//*电子版-EBCDIC文本
//*I-图像(二进制数据)
//*L-本地格式
//
//对于A和E,第二个类型字符指定文本的显示方式
//被解释。它可以是:
//
//*N-不打印(不用于打印)。如果
//省略第二个类型字符。
//*T-Telnet格式控制(,等)
//*C-ASA运输控制
//
//对于L,第二个类型字符指定每个字符的位数
//字节,并且不能省略。
最终集acceptedTypeCharacters=新哈希集(Arrays.asList(
新字符[]{'A','E','I','L'}
));
最终集acceptedOptionalSecondCharacters=新哈希集(Arrays.asList(
新字符[]{'N','T','C'}
));
if(acceptedTypeCharacters.contains(typeCharacter)){
if(新字符('A').equals(typeCharacter)| |新字符('E').equals(typeCharacter)){
if(acceptedOptionalSecondCharacters.contains(optionalSecondCharacter)){
executeCommand(“类型”+类型字符+“”+可选第二字符);
}
}否则{
executeCommand(“类型”+类型字符);
}
}
}

以下是我的做法:

private static final List<String> ALLOWED = Arrays.asList("AN", "AT", "AC", "EN", "ET", "EC");

public void setTransferType(Character type, Character optional) 
  throws NumberFormatException, IOException {

  String[] arr = new String[] { "AN", "AT", "AC", "EN", "ET", "EC" };

  if(type = 'I')
     executeCommand("TYPE " + type );
  else if(type = 'L') {
     executeCommand("TYPE " + type + " " + optional);
  else if(ALLOWED.contains("" + type + optional)) 
     executeCommand("TYPE " + type + " " + optional);
  else
     // Handle an incorrect argument error               
}
private static final List ALLOWED=Arrays.asList(“AN”、“AT”、“AC”、“EN”、“ET”、“EC”);
public void setTransferType(字符类型,字符可选)
抛出NumberFormatException,IOException{
字符串[]arr=新字符串[]{“AN”、“AT”、“AC”、“EN”、“ET”、“EC”};
if(类型='I')
executeCommand(“类型”+类型);
else if(类型='L'){
executeCommand(“类型”+类型+”+可选);
else if(允许。包含(“+类型+可选))
executeCommand(“类型”+类型+”+可选);
其他的
//处理错误的参数错误
}
  • 您的代码没有处理“L”案例。我假设您希望它执行
    executeCommand(“TYPE”+TYPE+“”+可选);
  • 您的代码默认忽略了不正确的参数。我添加了一个
    else
    (最后一个)来显式处理此情况
  • 您使用的名称太嘈杂。例如,您声明了一个Character类型的变量,并将其命名为
    typeCharacter
    。名称的“Character”后缀是noise-它不会添加任何有用的信息
  • 如果你的方法的接口和责任是明确的,那么我就不会太担心它的实现(特别是在这样短的方法中)。只要写一个最简单的东西,让它通过测试。如果你还没有写,你最好马上开始。你最好把时间花在写上,而不是润色实现

以下是我的做法:

private static final List<String> ALLOWED = Arrays.asList("AN", "AT", "AC", "EN", "ET", "EC");

public void setTransferType(Character type, Character optional) 
  throws NumberFormatException, IOException {

  String[] arr = new String[] { "AN", "AT", "AC", "EN", "ET", "EC" };

  if(type = 'I')
     executeCommand("TYPE " + type );
  else if(type = 'L') {
     executeCommand("TYPE " + type + " " + optional);
  else if(ALLOWED.contains("" + type + optional)) 
     executeCommand("TYPE " + type + " " + optional);
  else
     // Handle an incorrect argument error               
}
private static final List ALLOWED=Arrays.asList(“AN”、“AT”、“AC”、“EN”、“ET”、“EC”);
public void setTransferType(字符类型,字符可选)
抛出NumberFormatException,IOException{
字符串[]arr=新字符串[]{“AN”、“AT”、“AC”、“EN”、“ET”、“EC”};
if(类型='I')
executeCommand(“类型”+类型);
else if(类型='L'){
executeCommand(“类型”+类型+”+可选);
else if(允许。包含(“+类型+可选))
executeCommand(“类型”+类型+”+可选);
其他的
//处理错误的参数错误
}
  • 您的代码没有处理“L”案例。我假设您希望它执行
    executeCommand(“TYPE”+TYPE+“”+可选);
  • 您的代码默认忽略了不正确的参数。我添加了一个
    else
    (最后一个)来显式处理此情况
  • 您使用的名称太嘈杂。例如,您声明了一个Character类型的变量,并将其命名为
    typeCharacter
    。名称的“Character”后缀是noise-它不会添加任何有用的信息
  • 如果你的方法的接口和责任是明确的,那么我就不会太担心它的实现(特别是在这样短的方法中)。只要写一个最简单的东西,让它通过测试。如果你还没有写,你最好马上开始。你最好把时间花在写上,而不是润色实现

在一个简单的正则表达式检查中验证整个字符串:

String.matches("TYPE ([AE] [NTC]|I|L .)")
(注意,我在L后面使用了“.”(任何字符),因为文档没有解释该字符应该是什么。如果它只能是,比如说,7或8,请使用[78]。)


您可以进一步执行此操作(捕获组、预编译正则表达式、允许任意额外空格等),但上述操作基本上可以做到这一点。

在一个简单的正则表达式检查中验证整个字符串:

String.matches("TYPE ([AE] [NTC]|I|L .)")
(注意,我在L后面使用了“.”(任何字符),因为文档没有解释该字符应该是什么。如果它只能是,比如说,7或8,请使用[78]。)

您可以更进一步(捕获组、预编译正则表达式、允许任意额外的空格等),但上面基本上做到了这一点