java - 我对数据抽象定义的回答

标签 java c unix pthreads

我是 Java 新手,来自 C 背景,我如何回答“数据抽象可以在 Java 中实现吗?”的问题.

以下是我想回答的问题,如有错误请指正。

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

想要处理 pthread_t 数据的用户必须通过像 pthread_equal() 这样的函数来使用它,在本例中是为了检查相等性。但 C 仍然无法阻止用户做类似 'tid == pthread_self();' 的事情尽管 pthread_t 是不透明数据,但在编译时。 运行时行为未知。

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

最佳答案

听起来这是 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

关于java - 我对数据抽象定义的回答,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22110095/

相关文章:

java - 多线程怪异行为

c++ - C/C++ 中的最小二乘回归

timer - UNIX 编程。 struct timeval 如何打印它(C 编程)

C - 标记化字符数组

java - Unix环境下如何计算CPU和IO时间

ios - 如何获取 iOS 重启时间?

java - 正则表达式获取冒号之前和之后的字符串

java - ElementType.CONSTRUCTOR 有什么用?

java - 确定对象的大小 : best way to use instrumentation in scala/sbt

c++ - 从 FILE 结构获取文件模式?