Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:126849 X-Original-To: internals@lists.php.net Delivered-To: internals@lists.php.net Received: from php-smtp4.php.net (php-smtp4.php.net [45.112.84.5]) by qa.php.net (Postfix) with ESMTPS id DF6AE1A00BC for ; Wed, 19 Mar 2025 20:09:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=php.net; s=mail; t=1742414828; bh=6+qmAea5eo+bP/VRJSL2rZkp+VvL46EJ/O7r0+TDou4=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=esk3JqBlithg41+aAhjAd13iccGiAGoXGN3JXk1fZyUVnHHNkeTiI9Gv6stQgKOi5 v1Wl/PUcbBHoDGXVPCgz3+4gCjEnBy1kUrAQSuMyID0m6GOFowUl2S2uqMEO4pYfOc Jf6FPPfdKj2VY9C23Nk6oX8FjrrGJkonJ8I/oL/6Az8943nmrnzF06PY6bK6vepKZp zB+9GlVksJQg+GwNgBsygmk/yldGh1eFMkBNlQ+FzXVWH1RGaJA7W+5zktjlcTTN5i tjQmvVPW8OSGdTGUfmzvLyOvX7WvYUt/7qqBMNvBhv5qKBfNgLiM0lRaQmUXH0s+I5 L/EgljkMkJBbQ== Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id D9EE218006A for ; Wed, 19 Mar 2025 20:07:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-3.6 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,DMARC_PASS, FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,HTML_MESSAGE, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS autolearn=no autolearn_force=no version=4.0.0 X-Spam-Virus: No X-Envelope-From: Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2081.outbound.protection.outlook.com [40.92.90.81]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (secp384r1) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Wed, 19 Mar 2025 20:07:07 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KaoToiIpa8aWEqTy7V7Ehw9GbfG6Y5yWlEoo+OdGgqADeClL3IZHUOvmjJmssnVHOQUcapPxF225DMyGwcF1RjxuLNkWOt1+7NihqqdmtohEZE2JOFHib1UlNqeqiHp2R9LU5tMK+jQuszB8mFWbg8dU7nj3MbzXs+ARyMXfnN417Cc2kkPSZO6BRFsoXRPU0dy/3xou8a771CVni3tzOEQr5TpLcUD0nxp+YtI3xUBE1ydEDQhi4RjjocmEWNYTsHdqESjBm+6NgLFOvqYRSgpmZXcQT6E+zNy1ilSEdZvKbpqFY6ug4mez+s5u4UPbnivM/bP5mmLqnII3XbkLdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Oj+RPLILXAitxjBPA0B7NXg+C282d8lNP0JaA1+Yzd0=; b=X8MQUkPDo1JOeCEcF2XOYrky5411C0xjCepFKVdqk9W4DLwCbyI8J3nZAkF/cmllEf4j0wsJ+H5ZFDmAUuuvn+1xcN0ioDftCZAVPotR1LtzLUst2l+64grIzG9UHPMJAJ5VPAxpBJa1PvcSdcfHJA2gCzGHJDn0UBaZIkVtZRatTRDIUtyDnwKSfpULCSjE6Q2oHa6aAjokpG/l37VXspT73GTjd1yDM/TXEpqzg016sbTdTEubCwlbrsIkjkSpH4mHh12v+jShVrtUyWU1UoDmWzySjuAZXVxbl3NRu3nokeTQkYGgkxhpySaxBfECtLJ/Z5wU8jNoOFQwAZemLQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Oj+RPLILXAitxjBPA0B7NXg+C282d8lNP0JaA1+Yzd0=; b=dFfG49k7psdCt0mE+c2uD9hkYHYXVlaaUMX83YLhFQvwZcMf1Id6XFtLSPJ70D6tAqE+bQHPqMbSDHtPsHoXEQ7OjAal2sDZImHT3+54nh/clqi9lwmigtyh7zGCW8tyYG3i/T8FUfHkVp+E95gOPe2JHYb8r1h2H5QG0XdbAFKeb7qLUyPDEpxG4MsZuiqk7yzGSab9BeqAVsfDFYqgPlAy53t0ozFCFCBwVcUCunl5dEP9R/FG9NWjV7jjF8SbxNvKmqiaFfvHbA9u6+mK/Wh/AzhoYlkphyZa4CjiJJHsN8UbI8o0qkJjAc7Dy/wWL3brpiejG9+QELJBR32Dww== Received: from AM8P250MB0170.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:321::21) by AS4P250MB0462.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:4b1::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.34; Wed, 19 Mar 2025 20:09:34 +0000 Received: from AM8P250MB0170.EURP250.PROD.OUTLOOK.COM ([fe80::651e:bbd2:b18a:80ff]) by AM8P250MB0170.EURP250.PROD.OUTLOOK.COM ([fe80::651e:bbd2:b18a:80ff%3]) with mapi id 15.20.8534.034; Wed, 19 Mar 2025 20:09:34 +0000 Content-Type: multipart/alternative; boundary="------------L4JL0FlOhYsM8b0ZijLc00y0" Message-ID: Date: Wed, 19 Mar 2025 21:09:32 +0100 User-Agent: Mozilla Thunderbird Subject: Re: [PHP-DEV] RFC: short and inner classes To: Rob Landers Cc: internals@lists.php.net References: <3e4ba7ea-a154-452d-abfc-05ef1322fade@app.fastmail.com> <782d76d9-711a-4cee-ae0e-fe0d69973f53@app.fastmail.com> <48dce917-d147-456b-9f03-c7e23411adff@app.fastmail.com> Content-Language: en-US In-Reply-To: <48dce917-d147-456b-9f03-c7e23411adff@app.fastmail.com> X-ClientProxiedBy: FR4P281CA0240.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:e9::19) To AM8P250MB0170.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:321::21) X-Microsoft-Original-Message-ID: <87141a73-5701-4db9-8e2d-d86c12e886a1@hotmail.com> Precedence: bulk list-help: list-post: List-Id: internals.lists.php.net x-ms-reactions: disallow MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM8P250MB0170:EE_|AS4P250MB0462:EE_ X-MS-Office365-Filtering-Correlation-Id: 86cef675-8e5f-456c-0411-08dd6721f747 X-Microsoft-Antispam: BCL:0;ARA:14566002|7092599003|461199028|12121999004|5072599009|15080799006|8060799006|19110799003|19061999003|3412199025|440099028; X-Microsoft-Antispam-Message-Info: =?utf-8?B?Vms5Mys4RTYyYVlFWTRzV3RrTC9LSUJwWnE0ZFE1QTRkcTNwMGJHMXBaaEVa?= =?utf-8?B?Um8waTg0d2Myb2JkODZSRnZWN3lPdk1CbzlRM0FpRHlLUEptOFJrVnBoWDVZ?= =?utf-8?B?MHVXVCtKVzFxVEFiS1V6Y0g5bTVyL3ppSGg4SXh5eVkzNEtBdzdTS3J5WXI1?= =?utf-8?B?WG5lUDVZVSsvb1NZQS9zOFl2cHZGeGFLUUVXQjdXL2UvSHhsMmlENk9tdjNx?= =?utf-8?B?VEU3anN5R0Y0ZlJtS2YreTdiY2JBWjJMcUJLYTI0WjVwRnl3UU53N3FMWHZF?= =?utf-8?B?Q1U3L0RvMmphYU5rSmNpa3dkZUdmbmFxVUtXMFdyVGNEcmVKZXg5blFlSUly?= =?utf-8?B?RzREQlIveHRiaDZIdUxhOUhRY1NyWUZuYWxwVlAwYTV5UitaY1BvUkQ2MS9Z?= =?utf-8?B?MzdWQ2NnWDRwTzVRYXJvUGQyNVBzSXJoUlJPRUh2S2V6WkxkTG03QlBhTzVT?= =?utf-8?B?YkZGQ0hjVVhZNHEwUTF1UFhDRFpMY1Y1YkowNlMyV3djbEhQTlczZzRRS2dy?= =?utf-8?B?QnJrVFBaOEQrTlUreStQYzlKQ1M4eFQxZjE2YVRGblRJWDJCWG9NbmZqQlJy?= =?utf-8?B?WWlHcnFIYy9pRERpTmkxUys2TERDZHAzU0V4SzZJck1tdTcxTGZ6RzZnKzhL?= =?utf-8?B?Tys4bXI1NSs3UDNoUG5Ebkl4RTU0R2VDZk5oWnVaWTF2RGJDVHp2QzZpVnps?= =?utf-8?B?TzNwdVZVRzFGT2d2VDRHaXMvZjN1NXBUS2R5dWVwejNFRDJCWlp4dGJhbjZD?= =?utf-8?B?aFEzNlZHUC9PejAvajYrUTF2clpFUEkrWTR0WlNOYXZGR1MveUFQYXNOdDl5?= =?utf-8?B?VElNMzBDU0xXL3pPOUpHbXN5WmJJVy9NWjF2QytjQk9wMit0Q3p2VUpFeG1t?= =?utf-8?B?bzFaRkdCVlF6aGEvWGdDcXhKWDJGZVFjMkIyMVhIVWkxU29ibWMvMTQ4dHJO?= =?utf-8?B?dmx3ajRtNFdqZ29jSkN4S25Rd2M2OCtCU0xaVkIwNTk1R0xHbGd5amNSTkhZ?= =?utf-8?B?MXFDajVEV2xDdDRrN1NMZGZnTU5icm51RjAzTEJ4cUhLUWZpN2VSTWFuTk92?= =?utf-8?B?dTdRTFh3RlByeVJFVXJ5RXpKU3hFNmo2Y1NnSkZOUWRjUFJXUFMyQUFNWEJB?= =?utf-8?B?YzE0bjJlUkVYQUkzbjJiYm9vT3hnYkI0cjJnOUw4dFpqaG54YjdoUzYvUDFv?= =?utf-8?B?aHYybmxrb0ZOaFVJV05tR3NIM1hNbTZWZFgzc0lseEkyUFIxQXNOWG9EUFN6?= =?utf-8?B?TmFQenROMnVBTFZiQnUweVJIazd0M09qV3Y3bXV3Ym5DNXN0S0lUbUJiWWxM?= =?utf-8?B?SytlNUpJVE1YQnBPWmJIS3JZTlVqcG0vVjZzVVdjM3lJWkRPRDZpS2NmdjB3?= =?utf-8?B?NTQ2TDVJVTJTRjNBRDNvVHVGM1hTNHFaSnpLUlMvOFM2R2FlbDhKV1czSkFR?= =?utf-8?B?clNXUWhlam1zYlp0K0JEUC9iWGlmdXpBTkVSNTlZZm1tbHBOSkxjYVJ5WlVt?= =?utf-8?B?ZlZKMDFGTUVQRDJhZkl6UkdkSEQ4U01veDFkRTdNSmFwM2l2Q3JmUmlVa1dX?= =?utf-8?Q?+x+sRNAidXk5smhPNPY/Je6k4=3D?= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aTUvU2F0SWxYd0tpcEJRcHR4OUw4Y2lwcXlEd2t2NDc2dDJETURWNVBQQmNt?= =?utf-8?B?ZjVQN1JZYjBlMG9OVy9ucUZxekI5MVN5cWxVWWNsZjFJZTBwUUhIQ3R3SFkz?= =?utf-8?B?TTJBVVRxTUtVa241T0FnenNyWEExUlY5MGxVK3AyblNRbHpkR3lBelFhZndN?= =?utf-8?B?NzdMT2ZGbTJUbFBQQUpTYVlYWldZKy84MlFrWFZJNFBYcVRib1BQd0cvSXc0?= =?utf-8?B?UEJwSW04N1Y5VVlSOWc3VGRkWVRGb0VZcmhpTWRLTHhIYlp3NENncXZJUzNY?= =?utf-8?B?RDVGdURJcVNHb25TdHJCY3VaRU9TMnpCVkhpV0s3SWxINncwcHE5VytsRHhi?= =?utf-8?B?Z29BUFVwUysyWmo5eHc5UUZQSmtpVXVRWkoxZ0F3L0hIZU9mYjZ5U25ZbmEv?= =?utf-8?B?TElYTUU1QXgzSXFGeG93Ulg4NUQ3NVFERFBSNVo0YXo3azljYlZxQ1Q5UmRm?= =?utf-8?B?OVM0eVVxZlkwbTA1c1ZoM3NxUmI2c3dsV3ZjZWJMY2R0Q1dBQ3JIK1FQK3NI?= =?utf-8?B?QU1nMjMrZ2s5M3pEdEtWSXdJSkNWQjErUzZBa2F1blNtRGNJa0d2WWVIN0lK?= =?utf-8?B?dmNmdnk1Y1ViZFNuNnJDQmtweG1UdWRpMlQ1QUVkUkFNZWpUSjdwaGx1MkpW?= =?utf-8?B?M0lNTVQ0a2JOeVdVN2trWFBRRlNLR29NNXV0NXdXVEx0NWlSdzZhQTNPMHhs?= =?utf-8?B?akhmREtTRkgwWjhFUENvRS9HYnJXZEVOSmJZSG9JVEFPTmRVUEQ0dlFhVjNZ?= =?utf-8?B?Vm00aHZ4TEo1VVBScDRIcjE3ZExnWHZYd1Zoek1ZNnpySm01TU1UaUZ0TUNG?= =?utf-8?B?bHNNQXlrSUw0dkNxZ2hLYnJuQ21FdVhpWWcvUjgxVTZtOUVrYTM5MHN5aHBL?= =?utf-8?B?c2pCc0Nkb0hzTFBFMDliVVJBZDF3M0tnZi80SkxlUmhVQndhL05wZ1d1MmtK?= =?utf-8?B?NTd5aUp1OEhGcElYK202cmY5VjhOWHYzd1VUa1Bxb2ZzTXVTRitFeUk3Y2dT?= =?utf-8?B?dm01TG0vWVZoL1ZzV2lacVJSeGtRWXprbnBpV3gwblg1Njh5M2JWUVpGMlJk?= =?utf-8?B?Wkh6MFZWOS92TXgwQitWcEJ2alFrTFJZYWY4LzM3eHJjU2tiaVhZVmFLMGxw?= =?utf-8?B?ZFBReVRMVFIxZXZHZy92QW5iV1VXMUxzV3g2SWNXVW5GTmc4ak5kOGd4TnZQ?= =?utf-8?B?TmhKbmZzWDAzM08xa3dZWnIvUHNkZE9ENnlsbG1OVnkveXF2RXM0TVQ1UTFP?= =?utf-8?B?NWg5cUM5dEZtc2hKTHJhWXB5U1ovTGN1aTJIQjVkb0ExRnVvSUhUMGplR2FF?= =?utf-8?B?Y1VDVjRYMlRPSStqUVlDNmJ5ejNZSWR1QVNSam5ucUFsN0dzRW5vZnE0WDlK?= =?utf-8?B?NU1OTE9ZMmhJZDNyMFpOZDhGT3ZiaWtCOTNvTmFwQ21FYm1GcGcrV3FKei9F?= =?utf-8?B?S1F4T3ZvVnN3NGxHeTJtQm1sRmVXdGRUcHdmTlQvZ3dVSGQvOThMd29zUEpy?= =?utf-8?B?ZlR2bWJQNEt0Y08weWhVOEFLdHQ3VjFBL1VxQnFrdG1WemQ0d0lmRmthUTND?= =?utf-8?B?YVBrUGgyUWo2QTd2TmVOTHNwajJwRmU3TjhVQ05EdVNZSHBQeFFQVzRaYkRS?= =?utf-8?B?aHVkMXhVa3BIUE9DMGVMNXBObElKYktSRVNIUGFLcUJPOEoxK1I4S1gwWVds?= =?utf-8?B?eDdEUjRuYkFhRDczK0ljUXNPME9RdENEZGNyUFdSaVhpVGhPRVhabVdrQ3F2?= =?utf-8?Q?3q85mxruDvySrCT8MM=3D?= X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-e3d53.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: 86cef675-8e5f-456c-0411-08dd6721f747 X-MS-Exchange-CrossTenant-AuthSource: AM8P250MB0170.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Mar 2025 20:09:34.3170 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4P250MB0462 From: bobwei9@hotmail.com (Bob Weinand) --------------L4JL0FlOhYsM8b0ZijLc00y0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 19.3.2025 16:04:06, Rob Landers wrote: > On Tue, Mar 18, 2025, at 03:37, Bob Weinand wrote: >> >> Okay, I see the point with LSP. I'm not sure whether we need to >> preserve LSP for that specific scenario, but neither can I say that >> we should ignore it. >> >> (Effectively implementing LSP would mean that there's an implicit >> interface matching all public method signatures of the parent class, >> for child classes - which is doable, but possibly too much for the >> initial RFC.) >> >> I would however ask, should we not implement LSP compatible inner >> classes, to enforce that no child class may name a class the same >> than any non-private inner class declared by any of its parents, >> until we resolve this question (in possibly a future version of PHP). >> I do not think we should bar ourselves from allowing this in the future. > > I'm not sure I understand what you are asking. But I think you are > saying the following should be illegal? > > class ParentOuter { >   class ParentInner {} > } > > class ChildOuter extends ParentOuter { >   class ParentInner {} // not allowed > } Precisely. >> And not pretending starts with using a different symbol than a backslash. > > I have been thinking about this for a couple of days now... When > thinking through the ramifications of my decision to use :> over ::, > this will also affect generics, most likely -- whenever that happens. > This is because if this RFC passes, generics will want to be > consistent with whatever exists currently. > > If we were to use :>, then generics would probably look something like > this to be consistent: > > class Box { >   public function add(self:>T $item) {} > } > > The same thing would also probably apply to :: > > class Box { >   public function add(self::T $item) {} > } > > With `\`, it nearly follows exactly what you would expect-ish: > > use \Box\T as T; > > class Box { >   public function add(T $item) {} > > // or without use >   public function add(Box\T $item) {} > } > > With `\`, we can also just automatically check the current class as > part of namespace resolution when compiling: > > class Box { >   public function add(T $item) {} > } > > This would also make it easier to user inner classes: > > class Outer { >   public class Inner {} >   public function foo(Inner $bar) {} > } > > The other syntax options do not allow this; at least, I don't think > so. I'm very heavily leaning towards `\` as the separator. > > — Rob I'm failing to understand why you'd think this would be related at all? If we get generics, class Box {   public function add(T $item) {} } would just work, without any use or such. There will not be a symbol Box::T or Box\T, just all mentions of T within the Box class will be taken as "this is the generic placeholder" and the compiler takes care. It's not like that T will be directly accessible from outside of the class or actually a proper type, unlike inner classes. A generic is not an inner class nor will it look like it. Also, there's no accessing of a parents generic - you write class Child extends ParentClass - or something along these lines, getting the T available for your class. Bob --------------L4JL0FlOhYsM8b0ZijLc00y0 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit


On 19.3.2025 16:04:06, Rob Landers wrote:
On Tue, Mar 18, 2025, at 03:37, Bob Weinand wrote:

Okay, I see the point with LSP. I'm not sure whether we need to preserve LSP for that specific scenario, but neither can I say that we should ignore it.

(Effectively implementing LSP would mean that there's an implicit interface matching all public method signatures of the parent class, for child classes - which is doable, but possibly too much for the initial RFC.)

I would however ask, should we not implement LSP compatible inner classes, to enforce that no child class may name a class the same than any non-private inner class declared by any of its parents, until we resolve this question (in possibly a future version of PHP).
I do not think we should bar ourselves from allowing this in the future.

I'm not sure I understand what you are asking. But I think you are saying the following should be illegal?

class ParentOuter {
  class ParentInner {}
}

class ChildOuter extends ParentOuter {
  class ParentInner {} // not allowed
}

Precisely.

And not pretending starts with using a different symbol than a backslash.

I have been thinking about this for a couple of days now... When thinking through the ramifications of my decision to use :> over ::, this will also affect generics, most likely -- whenever that happens. This is because if this RFC passes, generics will want to be consistent with whatever exists currently.

If we were to use :>, then generics would probably look something like this to be consistent:

class Box<T> {
  public function add(self:>T $item) {}
}

The same thing would also probably apply to ::

class Box<T> {
  public function add(self::T $item) {}
}

With `\`, it nearly follows exactly what you would expect-ish:

use \Box\T as T;

class Box<T> {
  public function add(T $item) {}

// or without use
  public function add(Box\T $item) {}
}

With `\`, we can also just automatically check the current class as part of namespace resolution when compiling:

class Box<T> {
  public function add(T $item) {}
}

This would also make it easier to user inner classes:

class Outer {
  public class Inner {}
  public function foo(Inner $bar) {}
}

The other syntax options do not allow this; at least, I don't think so. I'm very heavily leaning towards `\` as the separator.

— Rob

I'm failing to understand why you'd think this would be related at all?

If we get generics,

class Box<T> {
  public function add(T $item) {}
}

would just work, without any use or such. There will not be a symbol Box::T or Box\T, just all mentions of T within the Box class will be taken as "this is the generic placeholder" and the compiler takes care.
It's not like that T will be directly accessible from outside of the class or actually a proper type, unlike inner classes.

A generic is not an inner class nor will it look like it. Also, there's no accessing of a parents generic - you write class Child<T> extends ParentClass<T> - or something along these lines, getting the T available for your class.

Bob

--------------L4JL0FlOhYsM8b0ZijLc00y0--