日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

[转载] java 计算协方差_Java的深度:通过协方差暴露的API泄漏

發(fā)布時(shí)間:2025/3/11 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转载] java 计算协方差_Java的深度:通过协方差暴露的API泄漏 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

參考鏈接: 關(guān)于Java中null的有趣事實(shí)

java 計(jì)算協(xié)方差

?

??

? ?

??

??

??

? Java有時(shí)可能非常棘手,特別是在API設(shè)計(jì)中。?

? 讓我們看一個非常有趣的展示柜。?

? jOOQ強(qiáng)烈地將API與實(shí)現(xiàn)分開。?

? 所有API都在org.jooq包中,并且是公共的。?

? 大多數(shù)實(shí)現(xiàn)是在org.jooq.impl包和package-private中。?

? 只有工廠和一些專用的基礎(chǔ)實(shí)現(xiàn)是公開的。?

? 這允許非常強(qiáng)大的包級封裝,幾乎只向jOOQ用戶公開接口。?

? ?包級封裝的簡化示例??

? ?大致來說,jOOQ如何建模SQL表。 (過于簡化的)API:??

? package org.jooq;

?

/**

?* A table in a database

?*/

public interface Table {

?

? /**

? ?* Join two tables

? ?*/

? Table join(Table table);

}

? ?還有兩個(過于簡化的)實(shí)現(xiàn)類:??

? package org.jooq.impl;

?

import org.jooq.Table;

?

/**

?* Base implementation

?*/

abstract class AbstractTable implements Table {

?

? @Override

? public Table join(Table table) {

? ? return null;

? }

}

?

/**

?* Custom implementation, publicly exposed to client code

?*/

public class CustomTable extends AbstractTable {

}

? ?內(nèi)部API的公開方式??

? ?假設(shè)內(nèi)部API在協(xié)方差方面有一些技巧:??

? abstract class AbstractTable implements Table, InteralStuff {

?

? // Note, this method returns AbstractTable, as it might

? // prove to be convenient to expose some internal API

? // facts within the internal API itself

? @Override

? public AbstractTable join(Table table) {

? ? return null;

? }

?

? /**

? ?* Some internal API method, also package private

? ?*/

? void doThings() {}

? void doMoreThings() {

?

? ? // Use the internal API

? ? join(this).doThings();

? }

}

? ?乍一看,這看起來很安全,是嗎? AbstractTable是包私有的,但CustomTable對其進(jìn)行了擴(kuò)展并繼承了其所有API,包括“ AbstractTable join(Table)”的協(xié)變方法重寫。 這會導(dǎo)致什么? 查看以下客戶端代碼??

? package org.jooq.test;

?

import org.jooq.Table;

import org.jooq.impl.CustomTable;

?

public class Test {

? public static void main(String[] args) {

? ? Table joined = new CustomTable();

?

? ? // This works, no knowledge of AbstractTable exposed to the compiler

? ? Table table1 = new CustomTable();

? ? Table join1 = table1.join(joined);

?

? ? // This works, even if join exposes AbstractTable

? ? CustomTable table2 = new CustomTable();

? ? Table join2 = table2.join(joined);

?

? ? // This doesn't work. The type AbstractTable is not visible

? ? Table join3 = table2.join(joined).join(joined);

? ? //? ? ? ? ? ? ^^^^^^^^^^^^^^^^^^^ This cannot be dereferenced

?

? ? // ... so hide these implementation details again

? ? // The API flaw can be circumvented with casting

? ? Table join4 = ((Table) table2.join(joined)).join(joined);

? }

}

? ?結(jié)論??

? ?篡改類層次結(jié)構(gòu)中的可見性可能很危險(xiǎn)。 注意以下事實(shí):在接口中聲明的API方法始終是公共的,而不管涉及非公共偽像的任何協(xié)變實(shí)現(xiàn)。 如果API設(shè)計(jì)人員無法正確處理API用戶,這可能會很煩人。??

? ?在下一版的jOOQ中已修復(fù)??

? ?參考: Java的深度:在JAVA,SQL和JOOQ博客中, JCG合作伙伴 Lukas Eder 通過協(xié)方差暴露了API泄漏 。??

??

?

?

? 翻譯自: https://www.javacodegeeks.com/2012/05/depths-of-java-api-leak-exposed-through.html

?

?java 計(jì)算協(xié)方差

總結(jié)

以上是生活随笔為你收集整理的[转载] java 计算协方差_Java的深度:通过协方差暴露的API泄漏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。