`
cloverprince
  • 浏览: 129451 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

证明:白马非马

阅读更多
公孙龙说:“白马非马”。

当然,这可以理解成,“白马“和“马“不是全同的概念,白马是一种马。

但是,我要证明,白马连“一种马”都不是!

=========== 我是严肃的分割线 ============

首先,要明确,什么是“白马”。我们可以定义:

引用
定义:如果一匹马身上的毛都是白的,那么这匹马可以称为“白马“。


姑且认为是全白的吧,也认为我们在生活中经常可以找到这样的马。类似的,我们可以定义“黑马”、“枣红马”等等。

对于任何一匹马,我们可以从这匹马上揪下一些毛。没问题吧。

对于任何一匹吗,我们可以给这匹马添加一些毛。假设我们可以这样做吧,加上一些毛仍然是那匹马。

随便拿一匹马(不管颜色),再拿一根黑毛,加在这匹马上,得到的仍然是马。

根据李氏替换原则,我们把这匹马换成一匹白马,我们也可以往上添加一些黑毛。

但是,我们不能给他添加黑毛,因为一旦添加了,得到的就不是白马了!

这不是有问题吗,凡是马都能往上边添加黑毛,白马是马,为什么给白马加上黑毛以后,就不是白马了呢?


——+——~~#¥+@%*¥(@  我是华丽的分割线 @(¥*%@+¥#~~——+——


Java程序员可以这样编程序:

package baima;

import java.util.*;

class Fur {}

class BlackFur extends Fur {}
class WhiteFur extends Fur {}

interface Horse {
	List<Fur> getFurs();
}

interface WhiteHorse extends Horse {
	List<WhiteFur> getFurs();{ // ERROR: The return type is incompatible with Horse.getFurs()
}


可惜Java不允许你这样定义“白马“。Java认为,List<WhiteFur>不是List<Fur>的子类。

如果你了解Java的“协变类型”,你会想这样定义:
interface Horse {
	List<? extends Fur> getFurs();  // OK
}

interface WhiteHorse extends Horse {
	List<? extends WhiteFur> getFurs();  // OK
}


编译正确。

然后我们试试:
class ConcreteWhiteHorse implements WhiteHorse {
	private List<WhiteFur> furs = new ArrayList<WhiteFur>();

	@Override
	public List<WhiteFur> getFurs() {
		return furs;
	}
}

public class BaimaTest {
	public static void main(String[] args) {
		WhiteHorse myHorse = new ConcreteWhiteHorse();
		List<WhiteFur> furs = myHorse.getFurs(); // ERROR: Type mismatch: cannot convert from List<capture#1-of ? extends WhiteFur> to List<WhiteFur>
		furs.add(new WhiteFur());
	}
}


编译通不过。Java不允许从List<? extends WhiteFur>到List<WhiteFur>的转换。

如果我们这样:

public class BaimaTest {
	public static void main(String[] args) {
		WhiteHorse myHorse = new ConcreteWhiteHorse();
		List<? extends WhiteFur> furs = myHorse.getFurs();
		furs.add(new WhiteFur()); // ERROR: The method add(capture#2-of ? extends WhiteFur) in the type List<capture#2-of ? extends WhiteFur> is not applicable for the arguments (WhiteFur)
	}
}


furs是List<? extends WhiteFur>型的,不能添加WhiteFur类型的元素。

看样子,不进行强制类型转换,总是会出错的。

我们这样呢?

public class BaimaTest {
	public static void main(String[] args) {
		WhiteHorse myHorse = new ConcreteWhiteHorse();
		List<WhiteFur> furs = (List<WhiteFur>) myHorse.getFurs(); // WARNING: Unchecked
		furs.add(new WhiteFur());

		Horse myHorseAgain = myHorse;
		List<Fur> fursAgain = (List<Fur>) myHorseAgain.getFurs(); // WARNING: Unchecked
		fursAgain.add(new BlackFur());

		for (WhiteFur wf : myHorse.getFurs()) { // java.lang.ClassCastException
			System.out.println("This is a '"+wf.getClass().getSimpleName()+"'");
		}
	}
}


看样子没问题吧,编译也通过了。我们成功地给一只白马增加了一根黑毛。你在想,为什么不能呢?白马也是马,马可以加黑毛,白马为什么不能加黑毛呢?

for循环中,试图把myHorse.getFurs()中的成员赋给wf。这一行连警告都没有,因为编译器认为myHorse.getFurs()本来就是List<WhiteFur>型的,当然可以赋值给WhiteFur型的wf呀。

但是,运行时出错。第一根毛是白毛,没错。但是,第二根是黑毛,赋给wf时,类型转换失败。

引用

This is a 'WhiteFur'
Exception in thread "main" java.lang.ClassCastException: baima.BlackFur cannot be cast to baima.WhiteFur
at baima.BaimaTest.main(BaimaTest.java:41)


.......................我是无奈的分割线......................

好了,你说,白马到底是不是马呢?

参考:http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf

1
2
分享到:
评论

相关推荐

    国学知识积累带答案.doc

    解释:白马非马是中国古代文学中常见的典故,表达了名家的逻辑辩证特点。 知识点19: 古人的婚礼在什么时间举行? answer:黄昏 解释:古人的婚礼在黄昏举行,是中国古代礼仪中的一部分。 知识点20: “近朱者赤...

    开心辞典题库各类.doc

    知识点:白马非马是一个中国古代典故,体现了名家的逻辑辩证思想。 19. 古人的婚礼在什么时间举行? 答案:傍晚 知识点:古人的婚礼通常在傍晚举行。 20. “近朱者赤,近墨者黑”所蕴含的道理和下列哪句话最相似...

    西藏阿里地区札达县综合素质真题汇总.doc

    18. 逻辑命题:“白马非马”错误在于割裂了个性与共性的关系。 19. 活动安排:同类活动相邻,最早抽奖安排在周三,活动仍可进行。 20. 人的能力:工作意愿是连接效能和潜能的关键,影响执行力。 这些知识点虽然...

    初中语文200条基础常识题必考试题库.doc

    18. 名家辩证法:“白马非马”体现了名家的逻辑辩证思想。 19. 古代婚礼习俗:婚礼通常在傍晚举行。 20. 成语寓意:“近朱者赤,近墨者黑”与“蓬生麻中,不扶而直”有相似道理。 21. 儒家经典:“天时不如地利,...

    国学常识200题含答案.doc

    17. 名家特点:"白马非马"的典故表达了名家注重逻辑辩证的特点(选项A),这是公孙龙的辩论命题。 这些题目展现了中国国学的广泛性和深度,包括诗词、历史、文学、礼仪、艺术等多个领域,是了解和学习中国文化的...

    暗渡陈仓--偷换论题的诡辩之二精选.doc

    这一轮反驳是通过类推比照,试图证明孔穿的立场存在逻辑不一致。 然而,公孙龙的辩论虽然犀利,但也有"暗渡陈仓"的痕迹。一方面,他将孔穿的"请去此术"误解为"教",混淆了请求与教授的概念。另一方面,他在论证中将...

    中国诗词大赛试题库附答案.doc

    "白马非马"是名家的代表性论点,探讨了概念的相对性和具体性。 19. 古代婚礼的时间: 古代婚礼通常在傍晚举行,称为"昏礼"。 20. 成语与哲学观念: "近朱者赤,近墨者黑"强调环境对人的影响,意味着接近好人会...

    高中语文必考文学常识200题.docx

    17. 名家逻辑思维:“白马非马”体现了名家注重逻辑辩证的特点。 18. 婚礼的时间安排:古代婚礼通常在傍晚举行。 19. 与环境关系的比喻:“近朱者赤,近墨者黑”与“蓬生麻中,不扶而直”都强调环境对人的影响。 ...

    华宁2019年事业编招聘考试真题及答案解析整理版.docx

    2. 矛盾理论:公孙龙的“白马非马”之说涉及到矛盾的普遍性和特殊性关系。正确理解应是,矛盾的普遍性和特殊性是相互联结的,不能割裂开来。 3. 词语关系:分析“表扬:赞扬:颂扬”和“军事:军队:军人”等词组的关系...

    云南九年级传统文化考试题.pdf

    13. 公孙龙与白马非马:公孙龙是战国时期的哲学家,提出了“白马非马”这一逻辑论证。 14. 《孙子兵法》:孙武所著,是兵学圣典,对后世军事思想有很大影响。 15. 曹操与望梅止渴:曹操在征讨张绣时,运用...

    嵊泗事业编招聘2016年考试真题及答案解析最全版.docx

    侗族大歌是一种复调音乐形式,具有独特的“众低独高”合唱方式,这是罕见的民间音乐现象,证明中国也有复调音乐的传统。 2. 区域发展:"统筹区域发展"的实质被描述为促进不同地区之间的平衡发展,不仅仅是鼓励沿海...

    晋源2020年事业编招聘考试真题及答案解析版(1).docx

    - 公孙龙的“白马非马”观点是哲学上的一个经典例子,涉及到逻辑中的矛盾同一性和特殊性。题目中提到的错误在于割裂了矛盾普遍性和特殊性的关系,即忽视了共性与个性的统一。 4. 商业伦理与论证有效性: - 这道...

    原理2013-2014-2复习试题.doc

    8. **辩证法与矛盾**:“白马非马”割裂了矛盾的普遍性和特殊性,而辩证法认为事物既有普遍性又有其特殊性。矛盾的两种基本属性是同一性和斗争性,它们共同推动事物的发展。 9. **世界的统一性**:世界的统一性在于...

    物极必反有什么典故.doc

    9. 白马非马:探讨一般与个别的关系,反对割裂它们之间的联系。 10. 城门失火,殃及池鱼:强调事物间的普遍联系。 11. 千里之堤,溃于蚁穴:体现量变与质变的辩证关系,微小的变化可能导致重大后果。 12. 塞翁失马,...

    2019江西南城县麻姑山风景名胜区管理委员会招聘模拟试题及答案解析.docx

    5. **辩证法思想**:第五题检验了对辩证法的理解,其中A、B、C项体现了矛盾的对立统一、转化和相互依存,而D项“白马非马”则违反了这一原则。 6. **管理幅度**:第六题讨论了组织结构中管理幅度的影响因素,当工作...

    2021高考政治总复习 第9课 唯物辩证法的实质与核心指导随堂集训(含解析) 新人教版必修4.doc

    4. **诡辩与矛盾的普遍性与特殊性**:“白马非马”的论断,公孙龙的诡辩割裂了矛盾的普遍性和特殊性之间的联系,白马是马的特殊性,也是马的普遍性(马的共性)的体现。 5. **民生工程与矛盾处理**:建设民生工程时...

    国学经典知识竞赛题含答案解析.doc

    18. 名家思想:名家注重逻辑辩证,如“白马非马”的辩论。 19. 中国八大菜系:不包括赣菜系,其他分别是鲁菜、川菜、粤菜、苏菜、浙菜、闽菜、湘菜。 20. 语录道理:“近朱者赤,近墨者黑”与“蓬生麻中,不扶而直”...

    小学生国学常识200题与答案解析.doc

    - "白马非马"是名家公孙龙提出的典故,体现了逻辑辩证法的特点。 16. 婚俗文化: - 古人的婚礼通常在傍晚举行,称为黄昏礼。 17. 诗词理解 - 诗词寓意: - "近朱者赤,近墨者黑"比喻环境对人的影响,与"蓬生麻...

    2019年安徽黄山管委会规划土地处招聘模拟试题及答案解析.docx

    1. 哲学部分:辩证法思想的考察,例如选项中的“白马非马”悖论,体现了对矛盾普遍性与特殊性的理解。 2. 计算机科学:强调计算机的主要功能是实现高速运算,这是计算机区别于其他设备的核心能力。 3. 经济决策:...

    诸子百家人物介绍幻灯片模板.pptx

    5. **名家** - 公孙龙(GONG SUNlong):名家以辩论和逻辑推理见长,公孙龙的“白马非马”论点体现了他对语言和逻辑的精妙运用。 6. **纵横家** - 苏秦(SU QIN):纵横家关注国际关系和外交策略。苏秦提出的纵横...

Global site tag (gtag.js) - Google Analytics