concrete class in an interface
Feb. 24th, 2005 06:39 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
package com.weird.java;
public interface Untitled1 {
class XX {
private String _name;
public XX(String name) {
_name = name;
}
public String getName() {
return _name;
}
}
}
no subject
Date: 2005-02-25 03:06 am (UTC)no subject
Date: 2005-02-25 04:44 am (UTC)no subject
Date: 2005-02-25 05:41 am (UTC)no subject
Date: 2005-02-25 07:39 am (UTC)no subject
Date: 2005-02-25 05:00 pm (UTC)no subject
Date: 2005-02-25 07:16 pm (UTC)no subject
Date: 2005-02-25 03:40 am (UTC)и про прошлые выпуски журнала: кстати спасибо за деревянную идею (DirTree()) без рекурсии в основной функции. довольно красиво и удобно.
no subject
Date: 2005-02-25 04:43 am (UTC)no subject
Date: 2005-02-25 04:30 am (UTC)no subject
Date: 2005-02-25 04:40 am (UTC)no subject
Date: 2005-02-25 05:01 am (UTC)All because those lazy bastards couldn't spend an extra week to implement static virtual functions.
no subject
Date: 2005-02-25 07:47 am (UTC)Untitled.XX somebody = untitled.new XX("Io mi chiamo nessuno");
где untitled is an instance of a class implementing Untitled, the one that I wanted to call a universe.
no subject
Date: 2005-02-25 04:57 pm (UTC)no subject
Date: 2005-02-25 07:17 pm (UTC)no subject
Date: 2005-02-26 04:55 am (UTC)no subject
Date: 2005-02-26 05:30 am (UTC)no subject
Date: 2005-02-26 05:19 pm (UTC)no subject
Date: 2005-02-28 04:20 am (UTC)no subject
Date: 2005-02-28 04:38 am (UTC)no subject
Date: 2005-02-25 05:03 pm (UTC)Untitled.XX bla = new untitled.XX("bla-bla");
тоже пойдёт?
no subject
Date: 2005-02-25 07:18 pm (UTC)no subject
Date: 2005-02-26 04:52 am (UTC)no subject
Date: 2005-02-26 05:32 am (UTC)no subject
Date: 2005-02-26 05:15 pm (UTC)это только в джаве так, и это есть извращение, которое надо забыть как можно скорее, как страшный сон, и уж во всяком случае не использовать это в реальных проектах с участием кумаров.
в сишарпе всё по-человечески: new Outer.Inner();
нужна ссылка на инстанс Outer - заводи члена, не нужна - не заводи.
джавовские вложенные классы имеют своей причиной отсутствие указателей на функции и как следствие необходимость нагромождать классы листенеров, которые удобно пихать во вложенные классы и которым, конечно, нужен инстанс внешнего класса. я не прав?
no subject
Date: 2005-02-27 04:12 am (UTC)Ну и со ссылкой-то понятно; но не хотелось бы рассуждать на уровне пойнтеров, всё-таки 21-й век.
Я не думаю, что причина внутренних классов - отсутствие "указателей на функции" (блин, опять указатели). Скорее я бы сказал, что с функциями в джаве нельзя обращаться как с отдельными сущностями. А где можно?
Ну вот скажи, как бы ты в сишарпе определил класс Set, так чтобы equals() вычислялся правильно, и при этом бы Set оставался интерфейсом (т.е. допускал бы множественное наследование.:)?
А как это сделать в смолтоке?
Я сейчас балуюсь с чем-то таким:
interface Object {
Object template = new Object() {
..........
}
}
хорошо бы понять, до чего хорошего тут можно дойти.
no subject
Date: 2005-02-27 05:24 am (UTC)везде можно. в С++, в Дельфи, в C#. потому что нужно. а джава родилась в мучительном разрыве между попыткой сделать правильно и желанием побыстрее выбросить продукт на рынок. как, впрочем, всё у Сана. если бы не упомянутое желание, в джаве generics бы с самого начала были. а так сколько лет прошло, и сколько кумаров успело набежать?
Ну вот скажи, как бы ты в сишарпе определил класс Set, так чтобы equals() вычислялся правильно, и при этом бы Set оставался интерфейсом (т.е. допускал бы множественное наследование)?
ты неправильно бутеброд ешь. "вычислялся правильно" - это имплементация. а интерфейс, по определению - это отсутствие имплементации. то есть ты ставишь заведомо нерешаемую в рамках имеющейся парадигмы задачу. сломать парадигму и засунуть имплементацию в интерфейс можно, но примерно с той же эффективностью, как лечить боль головы отрубанием оной.
no subject
Date: 2005-02-28 04:30 am (UTC)Но имплементация имплементации рознь. Определение equals() относится не к имплементации, а к определению типа. Точно также для списков операция равенства определяется как равенство головы и хвоста. Во всём этом достаточно полиморфизма; просто один только интерфейс задаёт сигнатуры операций, но не задаёт аксиомы. Условия, то есть. Как задавать условия? В принципе, интерфейсы для этого достаточно гибки: в них можно задавать константы. Вот в константах-то я и пытаюсь держать аксиомы. Неправильно - но где такой язык, в котором я мог бы писать правильно? Сишарп? Камл? Хаскел? Я не знаю; скажите мне.
no subject
Date: 2005-02-28 04:42 am (UTC)no subject
Date: 2005-02-25 06:17 am (UTC)http://www.javaspecialists.co.za/archive/Issue006.html
no subject
Date: 2005-02-25 07:44 am (UTC)Map map = new HashMap() {{ put("su", "South Ural"); put("za", "Zabaikalie");}};
Пока что я не вижу понта (I don't see the point) поступать именно так. Народ на джава.нет вообще звереет от такого непочтительного отношения. Почему-то в адрес динамических прокси не ругаются.
Я-то просто ищу языковые средства.
а такое приходилось ли использовать?
Date: 2005-03-16 08:17 pm (UTC)/**non-static*/ protected class Inner{
}
}
Another file in the same package:
public class Untitled2 {
public static void main(String[] args) {
Untitled1 untitled1 = new Untitled1();
Untitled1.Inner inner= untitled1.new Inner();
}
}