我是Java新手,来自C background,我如何回答“可以用Java实现数据删除吗?”这个问题。
以下是我要回答的问题,如果我的想法不对,请纠正我。
SUSv3引入了一个名为pthread_t的数据类型,但没有指定它的表示(如ulong或指向struct等的指针......)并且必须被视为不透明数据。
想要处理pthread_t数据的用户必须通过像pthread_equal()之类的功能来使用它,在这种情况下检查相等性。但是C仍然不能阻止用户做'tid == pthread_self();'之类的事情。在编译时,尽管pthread_t是不透明的数据。 运行时行为未知。
Java作为语言功能的一部分,可以通过在类中的数据成员上引入private / protected / package访问说明符来阻止用户在编译时执行此类操作,并使用对这些数据成员执行相同逻辑的公共成员函数。
答案 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