2016-03-31 25 views
2

我想为FileFilter对象重写toString()方法。 我有这样一段代码覆盖toString()挥杆类

JFileChooser saveFile = new JFileChooser(); 
saveFile.setAcceptAllFileFilterUsed(false); 
saveFile.setMultiSelectionEnabled(false); 
saveFile.setFileFilter(new FileNameExtensionFilter("PNG", ".png")); 
String type = saveFile.getFileFilter().toString(); 
System.out.println(type); 

打印出沿[email protected][description=PNG extensions=[.png]]线的东西。我的目标是创建一个重写的toString方法,所以我只会得到.png部分。
我知道有更有效的方法来完成这个确切的任务,并且我知道基本的字符串函数来获得我需要的部分,但是我的目标是用重写的方法来完成它。

+4

创建一个类JFileChooser的延伸和覆盖的toString() – Tokazio

+0

您是否尝试过使用FileFilter.getDescription()?如果你不想进行转换,你需要继承FileNameExtensionFilter并覆盖toString。 – ControlAltDel

+0

“我知道基本的字符串函数来获得我需要的部分” - 为什么不使用它?你为什么要重写一个方法(这是不可能的,因为这个类是最终的)。 –

回答

3

我的目标是一个重写的方法来做到这一点。

由于以下几个原因,这是不可能的。唯一的办法就是通过构图,而不是通过继承。

您可以仅在您拥有的类中重写方法。由于您不拥有FileNameExtensionFilter,返回FileFilter的实现,因此无法覆盖toString方法。

此外,FileNameExtensionFilter is a final class,所以你不能重写它的任何方法。

在这种情况下唯一可用的方法是创建自己的FileFilter环绕FileNameExtensionFilter,并将其从JFileChooser传递给您的筛选器。你将拥有这个类,所以你可以重写其toString需要:

class FileFilterWrapper { 

    private final FileFilter innerFilter; 

    public FileFilterWrapper(FileFilter innerFilter) { 
     this.innerFilter = innerFilter; 
    } 

    @Override 
    public String toString(){ 
     // Use innerFilter properties to produce the desired String 
     return ... 
    } 
} 
+0

注意:作为最终的类,您无法扩展FileNameExtensionFIlter。因此,声明“唯一的方式是通过构成” – DwB

+0

@DwB正确的,这就是“另外......”段落所说的。 – dasblinkenlight

+0

@dasblinkenlight你能详细说明你的最后一段吗?我理解你的一般解释,但我忘记了如何创建一个类“包装'FileNameExtensionFilter'” – Rywi

2

如果你真的只是想在这里做,你可以为它做一个匿名内部类:

JFileChooser saveFile = new JFileChooser() { 
    @Override 
    public String toString() { 
     return ".png"; 
    } 
} 

我不能推荐这种方法,虽然,这将是更好地实现自己的子类JFileChooser并在其中定义新的String getFileExtension()方法。

2

为此,您需要使用JFileChooser的子类。如果这是你想重写的唯一方法,那么它非常简单。

public class MyFileChooser extends JFileChooser{ 
    public MyFileChooser(){ 
     super(); 
    } 

    @Override 
    public String toString(){ 
     //your string conversion code here 
    } 
}