12

现在 Java 8 添加了默认方法,有什么方法可以创建默认构造函数吗?

我试过了:

public interface KadContent<T>
{
    public default KadContent()
    {

    }
...

<identifier> expected从 Netbeans获取错误

为什么需要?我正在使用 Gson 序列化对象并得到“无法调用无参数构造函数..”错误,我知道我可以使用 Gson 的InstanceCreator解决这个问题。但是有没有办法创建一个默认的构造函数?

更新

我发现我自己的代码有问题。我正在使用

gson.fromJson(new String(data), InterfaceName.class);

代替

gson.fromJson(new String(data), ClassName.class);

因此,即使子类具有默认构造函数,反序列化代码也是不正确的。但是默认构造函数的问题仍然存在。

4

5 回答 5

11

不,这是不可能的。

  1. 在界面中没有意义
  2. 如果你实现一个接口,这个类已经有一个默认构造函数(没有参数的那个)

如果您希望实现具有“默认构造函数”,则可能需要使用抽象类。

于 2014-04-02T12:12:29.187 回答
2

构造函数是当对象出现时,无法构造接口的对象这一事实是健全的,无论是 Java、C# 还是 Java8

所以......如果您有任何想要在接口级别默认定义的功能,Java8 引入了Default Methods的概念。

于 2014-04-02T12:16:08.657 回答
2

Constructor提供一个in 是没有意义的Interface

检查您是否可以改为提供默认initialize()方法。

于 2014-04-02T12:11:05.343 回答
1

您需要将默认构造函数添加到要序列化的类中。

于 2014-04-02T12:11:08.307 回答
0

是的,有点!你可以做:

public interface MyInterface {
  MyInterface NO_OP = new MyInterface() {};
}
于 2018-12-13T18:10:34.663 回答