在调用超级构造函数之前检查变量的有效性

J Z*_*ane 6 java constructor extends class super

因此,我正在编写一些代码,这些代码涉及扩展我之前编写的类,其中使用构造函数创建和命名文件,该构造函数接受一个名称和一个 long 类型的大小。在那个原始类中,我在构造函数中验证输入的文件名包含一个“.”。字符,但不需要文件的特定扩展名。对于我正在编写的这个新类,我要求名称的扩展名为“.mp3”。但是,我的编译器不喜欢在超级构造函数之前进行验证。

这是我当前的代码:

public class Song extends DigitalMedia{

private String artist;
private String album;
private String name;
private long size;

public Song(String aName, long aSize, String aArtist, String aAlbum){
    super(aName, aSize);
    setArtist(aArtist);
    setAlbum(aAlbum);
}
Run Code Online (Sandbox Code Playgroud)

在创建该构造函数之前,有什么方法可以验证“aName”是否包含“.mp3”?

use*_*ica 4

我不能说这是否是设计程序的最佳方式,但您可以在参数之一内调用验证器方法super

public Song(String aName, long aSize, String aArtist, String aAlbum){
    super(validateName(aName), aSize);
    setArtist(aArtist);
    setAlbum(aAlbum);
}

private static String validateName(String name) {
    if (whatever) {
        throw new Whatever();
    }
    return name;
}
Run Code Online (Sandbox Code Playgroud)