2014-03-27 25 views
4

我有一个班在这里,仅包含static方法,所以我把它称为一个辅助类,一个例子:只有静态方法的辅助类声明应该是什么?

public class FileUtils { 
    public static String readFileEntry(final Path path, final String entryKey) throws IOException { } 

    public static String readAndModifyFileEntry(final Path path, final String entryKey, final UnaryOperator<String> operator) throws IOException { } 
} 

我应该如何声明类(abstractfinalstatic等) ,这样就不可能实例化类?因为你不应该这样做。
如果这是不可能的,那么最佳做法是什么?

我正在使用Java 8,如果这是任何额外的帮助。

+0

http://stackoverflow.com/a/10141243/235710 –

+0

@MohammadAdil这是Java,不C#,所以你不能necessarilly具有相同的修饰符组合。 – skiwi

+0

哦对不起.. http://stackoverflow.com/a/1326239/235710 –

回答

3

你可以声明构造为私有,并使用final关键字,以防止扩展:

public final class FileUtils { 
    private FileUtils() { 
    } 

    public static String readFileEntry(final Path path, final String entryKey) throws IOException { } 

    public static String readAndModifyFileEntry(final Path path, final String entryKey, final UnaryOperator<String> operator) throws IOException { } 
} 
+0

还有任何额外的好处,也宣布方法'最后'? – skiwi

+0

在你的情况下没有,因为你的类不能被扩展 – giorashc

+0

而且 - 静态方法在编译时绑定 - final对静态方法没有任何作用。 – Seelenvirtuose

3

这是一个常见的模式:

public final class Helper { 

    private Helper() {} 

} 
3

我会做的类final就像预防措施,所以没有机构错误地延伸。 更重要的是,我想补充一个私有构造函数,因此它不能被实例化:

public final class FileUtils { 

    /** Empty private constructor, just to prohibit instantiation */ 
    private FileUtils() {} 

    // Rest of the class... 
} 
2

static修改相关仅用于内部类和并不妨碍它实例化。 final修饰符可防止类的扩展,但不会影响创建实例的能力。 abstract修饰符确实会阻止创建类的实例。将纯实用程序类标记为abstract可能是一种很好的做法。其他防止类instanitation方法是创建私有的构造函数:

public class FileUtils { 
    private FileUtils() { 
     // empty constructor needed just to make it impossible to write new FileUtils() 
    } 
} 
相关问题