我对数据抽象定义的回答

时间:2014-03-01 04:26:30

标签: java c unix pthreads

我是Java新手,来自C background,我如何回答“可以用Java实现数据删除吗?”这个问题。

以下是我要回答的问题,如果我的想法不对,请纠正我。

SUSv3引入了一个名为pthread_t的数据类型,但没有指定它的表示(如ulong或指向struct等的指针......)并且必须被视为不透明数据。

想要处理pthread_t数据的用户必须通过像pthread_equal()之类的功能来使用它,在这种情况下检查相等性。但是C仍然不能阻止用户做'tid == pthread_self();'之类的事情。在编译时,尽管pthread_t是不透明的数据。 运行时行为未知。

Java作为语言功能的一部分,可以通过在类中的数据成员上引入private / protected / package访问说明符来阻止用户在编译时执行此类操作,并使用对这些数据成员执行相同逻辑的公共成员函数。

1 个答案:

答案 0 :(得分:0)

听起来这是generics的用例 - 它们可以提供编译时类型的安全性。改变修饰符的可见性或引入修饰符并不能解决这个问题,因为它们本身可能在语法上是正确的,但不会提供编译时的安全性。

以此为例:

public class ThreadData<T> {
    private T data;

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

此类ThreadData是通用的,可以接受我想要的任何类型的数据。

以下是示例用法 - 注释以内联方式提供。

ThreadData<Integer> intThreadData = new ThreadData<>();
intThreadData.setData(10); // OK; this is type bound to Integer
intThreadData.setData("10"); // Not OK - will fail at compile time